ABA


"RSA ו PHP הולך?"
גירסת הדפסה        
קבוצות דיון בניית אתרים נושא #14431 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 14431
asco88 
חבר מתאריך 17.6.04
26757 הודעות
   19:21   27.09.08   
אל הפורום  
  RSA ו PHP הולך?  
 
אני יודע ממש טיפה על RSA, ולא מצאתי ממש עזרה בגוגל, אפשר בעיקרון להשתמש בRSA ב PHP? הבנתי שכן, אבל לא ממש הסתדרתי,אשמח לטיפה עזרה בנושא.

תודה, שבוע טוב


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  לא משנה, הסתדרתי asco88  28.09.08 15:20 1
     תכנס לאתר של phpclasses יש שם מחלקה שמטפלת בזה akoka 28.09.08 15:26 2
         כן, בסוף באמת הגעתי לשם, ומצאתי שם משהו asco88  28.09.08 16:33 3
             חח תעלה את המחלקה לפה ,אין לי כוח להרשם לשם שוב akoka 28.09.08 16:39 4
                 זה העניין, זה אפילו לא המחלקה, זה רק הסבר שהוא כתב asco88  28.09.08 16:44 5
                     מה?:| הינה המחלקה akoka 28.09.08 16:46 6
                         ידוע, ובכ''ז asco88  28.09.08 16:49 7
                             ניסית פה akoka 28.09.08 16:59 8
                                 הממ לא, יוו איזה ערבי מטומטם asco88  28.09.08 17:08 9
  למה לא להשתמש ב MD5??? lior066 29.09.08 07:01 10
     לא יודע, אמרו לי שזה זה יותר מאובטח asco88  29.09.08 09:22 11
         מה?:| אני בטוח שאם תעשה את הדבר הבא akoka 29.09.08 10:03 12
             ברור, כי סלטות בעירום לא קשורות למחשב! asco88  29.09.08 11:49 13
                 האמת זה די פשוט akoka 29.09.08 17:52 14
                     בRSA אתה מצפין עם שני משתנים asco88  29.09.08 17:59 15
                         אני לא מסכים יש ייתרון די בולט בין השניים lior066 01.10.08 10:56 16
                             גם בRSA כל הצפנה לגופה asco88  01.10.08 21:15 17
                                 הנה מימוש עם הערות , מקווה שתבין פשוט מאוד... lior066 02.10.08 06:01 18

       
asco88 
חבר מתאריך 17.6.04
26757 הודעות
   15:20   28.09.08   
אל הפורום  
  1. לא משנה, הסתדרתי  
בתגובה להודעה מספר 0
 


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
akoka

   15:26   28.09.08   
אל הפורום  
  2. תכנס לאתר של phpclasses יש שם מחלקה שמטפלת בזה  
בתגובה להודעה מספר 1
 
   בצורה טובה.

אגב חח אנלא מבין את הרעיון בהצפנות האלה:|


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
asco88 
חבר מתאריך 17.6.04
26757 הודעות
   16:33   28.09.08   
אל הפורום  
  3. כן, בסוף באמת הגעתי לשם, ומצאתי שם משהו  
בתגובה להודעה מספר 2
 
מצוין של איזה איראני, רק מה, ניסיתי להבין את כל החישוב, ונתקעתי באמצע.. למשל, איך לעזעזאל הוא עשה את זה:

C = Pe % n
= 65 % 133
= 7776 % 133
= 62

עכשיו זה הקטע המשונה, P= 6 ו e= 5 ו n=133

יעני Pe זה 65, ואני בכלל לא הבנתי איך הוא התקדם פה, קיצר כל הבאסה.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
akoka

   16:39   28.09.08   
אל הפורום  
  4. חח תעלה את המחלקה לפה ,אין לי כוח להרשם לשם שוב  
בתגובה להודעה מספר 3
 
   אנלא זוכר את השם משתמש והסיסמא:|


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
asco88 
חבר מתאריך 17.6.04
26757 הודעות
   16:44   28.09.08   
אל הפורום  
  5. זה העניין, זה אפילו לא המחלקה, זה רק הסבר שהוא כתב  
בתגובה להודעה מספר 4
 
לאיך שכל זה עובד, ומה ששמתי פה, זה ה"הצפנה" עצמה, יעני שימוש ב N ו E לצורך הצפנה בPrivate Key, ובהדגמה ה P זה כאילו ההודעה, אבל לא הבנתי את כל הנוסחה.
מבין?
נ.ב. אני עדיין יכול להעלות את המחלקה אם אתה ממש רוצה..


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
akoka

   16:46   28.09.08   
אל הפורום  
  6. מה?:| הינה המחלקה  
בתגובה להודעה מספר 5
 
  

<?
/*
* Rivest/Shamir/Adelman (RSA) compatible functions
* to generate keys and encode/decode
*
*With a great thanks to:
*Ilya Rudev <[email protected]>
*Glenn Haecker <[email protected]>
*Segey Semenov <[email protected]>
*Suivan <[email protected]>
*
*Prime-Numbers.org provide small prime numbers list.
*You can browse all small prime numbers(small than 10,000,000,000) there.
*There's totally 455042511 prime numbers.
*http://www.prime-numbers.org/
*/

class RSA{
/*
* Function for generating keys. Return array where
* $array[0] -> modulo N
* $array[1] -> public key E
* $array[2] -> private key D
* Public key pair is N and E
* Private key pair is N and D
*/
public function generate_keys ($p, $q, $show_debug=0){
$n = bcmul($p, $q);

//m (we need it to calculate D and E)
$m = bcmul(bcsub($p, 1), bcsub($q, 1));

// Public key E
$e = $this->findE($m);

// Private key D
$d = $this->extend($e,$m);

$keys = array ($n, $e, $d);

if ($show_debug) {
echo "P = $p<br>Q = $q<br><b>N = $n</b> - modulo<br>M = $m<br><b>E = $e</b> - public key<br><b>D = $d</b> - private key<p>";
}

return $keys;
}

/*
* Standard method of calculating D
* D = E-1 (mod N)
* It's presumed D will be found in less then 16 iterations
*/
private function extend ($Ee,$Em) {
$u1 = '1';
$u2 = '0';
$u3 = $Em;
$v1 = '0';
$v2 = '1';
$v3 = $Ee;

while (bccomp($v3, 0) != 0) {
$qq = bcdiv($u3, $v3, 0);
$t1 = bcsub($u1, bcmul($qq, $v1));
$t2 = bcsub($u2, bcmul($qq, $v2));
$t3 = bcsub($u3, bcmul($qq, $v3));
$u1 = $v1;
$u2 = $v2;
$u3 = $v3;
$v1 = $t1;
$v2 = $t2;
$v3 = $t3;
$z = '1';
}

$uu = $u1;
$vv = $u2;

if (bccomp($vv, 0) == -1) {
$inverse = bcadd($vv, $Em);
} else {
$inverse = $vv;
}

return $inverse;
}

/*
* This function return Greatest Common Divisor for $e and $m numbers
*/
private function GCD($e,$m) {
$y = $e;
$x = $m;

while (bccomp($y, 0) != 0) {
// modulus function
$w = bcsub($x, bcmul($y, bcdiv($x, $y, 0)));;
$x = $y;
$y = $w;
}

return $x;
}

/*
* Calculating E under conditions:
* GCD(N,E) = 1 and 1<E<N
*/
private function findE($m){
$e = '3';
if(bccomp($this->GCD($e, $m), '1') != 0){
$e = '5';
$step = '2';

while(bccomp($this->GCD($e, $m), '1') != 0){
$e = bcadd($e, $step);

if($step == '2'){
$step = '4';
}else{
$step = '2';
}
}
}

return $e;
}

/*
* ENCRYPT function returns
* X = M^E (mod N)
*/
public function encrypt ($m, $e, $n, $s=3) {
$coded = '';
$max = strlen($m);
$packets = ceil($max/$s);

for($i=0; $i<$packets; $i++){
$packet = substr($m, $i*$s, $s);
$code = '0';

for($j=0; $j<$s; $j++){
$code = bcadd($code, bcmul(ord($packet[$j]), bcpow('256',$j)));
}

$code = bcpowmod($code, $e, $n);
$coded .= $code.' ';
}

return trim($coded);
}

/*
ENCRYPT function returns
M = X^D (mod N)
*/
public function decrypt ($c, $d, $n) {
$coded = split(' ', $c);
$message = '';
$max = count($coded);

for($i=0; $i<$max; $i++){
$code = bcpowmod($coded[$i], $d, $n);

while(bccomp($code, '0') != 0){
$ascii = bcmod($code, '256');
$code = bcdiv($code, '256', 0);
$message .= chr($ascii);
}
}

return $message;
}

// Digital Signature
public function sign($message, $d, $n){
$messageDigest = md5($message);
$signature = $this->encrypt($messageDigest, $d, $n, 3);
return $signature;
}

public function prove($message, $signature, $e, $n){
$messageDigest = $this->decrypt($signature, $e, $n);
if($messageDigest == md5($message)){
return true;
}else{
return false;
}
}

public function signFile($file, $d, $n){
$messageDigest = md5_file($file);
$signature = $this->encrypt($messageDigest, $d, $n, 3);
return $signature;
}

public function proveFile($file, $signature, $e, $n){
$messageDigest = $this->decrypt($signature, $e, $n);
if($messageDigest == md5_file($file)){
return true;
}else{
return false;
}
}
}
?>

אגב אתה צריך להכיר לפחות את הבסיס של הספריה bcmath כדי להבין בכלל איך זה עובד.
http://il.php.net/manual/en/ref.bc.php


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
asco88 
חבר מתאריך 17.6.04
26757 הודעות
   16:49   28.09.08   
אל הפורום  
  7. ידוע, ובכ''ז  
בתגובה להודעה מספר 6
 
השאלה שלי היא איך עובדת הנוסחה, כשאני אבין אותה, אז זה יהיה יותר פשוט.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
akoka

   16:59   28.09.08   
אל הפורום  
  8. ניסית פה  
בתגובה להודעה מספר 7
 
   http://he.wikipedia.org/wiki/RSA

?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
asco88 
חבר מתאריך 17.6.04
26757 הודעות
   17:08   28.09.08   
אל הפורום  
  9. הממ לא, יוו איזה ערבי מטומטם  
בתגובה להודעה מספר 8
 
הוא כותב 65, איך אני אמור להבין שזה 6 בחזקת 5????

חח קיצר תודה גבר.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
lior066

   07:01   29.09.08   
אל הפורום  
  10. למה לא להשתמש ב MD5???  
בתגובה להודעה מספר 0
 
   הרבה יותר פשוט לישום , הרבה יותר מאובטח...


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
asco88 
חבר מתאריך 17.6.04
26757 הודעות
   09:22   29.09.08   
אל הפורום  
  11. לא יודע, אמרו לי שזה זה יותר מאובטח  
בתגובה להודעה מספר 10
 


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
akoka

   10:03   29.09.08   
אל הפורום  
  12. מה?:| אני בטוח שאם תעשה את הדבר הבא  
בתגובה להודעה מספר 11
 
   גם אם אותו האקר יעשה סלטות בעירום הוא לא ייפענח את זה


function encrypt($string)
{
$encrypt_string = sha1(md5(md5(sha1(strrev($string)))));
return $encrypt_string;
}


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
asco88 
חבר מתאריך 17.6.04
26757 הודעות
   11:49   29.09.08   
אל הפורום  
  13. ברור, כי סלטות בעירום לא קשורות למחשב!  
בתגובה להודעה מספר 12
 
מקסימום לשכנה ממול.

חוץ מזה, התחלתי להתעסק בזה סתם כי זה נורא מעניין, ואז מישהו אמר לי שזה ההצפנה הכי טובה אז זרמתי עם זה..
אגב, לפי מה אתה קובע איזה הצפנה יותר טובה? אני לא יודע איך עובד הMD5 אבל הRSA נשמע לי די קשה לפיצוח..
אני אשמח אולי לאיזה הסבר אם לא קשה ...


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
akoka

   17:52   29.09.08   
אל הפורום  
  14. האמת זה די פשוט  
בתגובה להודעה מספר 13
 
   RSA היא הצפנה דו כיוונית זתומרת שאפשר לקבל את הערך המקורי באמצעות מפתח מסויים אם הבנתי נכון ,MD5 וSHA1 הם הצפנות חד כיווניות שאפשר לפענח רק עם כמה שנים של brutal force וrainbow tables ,ואם משלבים את שניהם + כמה טריקים קטנים הסיכוי שייפרצו את זה הוא אפסי.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
asco88 
חבר מתאריך 17.6.04
26757 הודעות
   17:59   29.09.08   
אל הפורום  
  15. בRSA אתה מצפין עם שני משתנים  
בתגובה להודעה מספר 14
 
ומפענח עם שניים אחרים (אחד נשאר, השני חדש) ולא משנה עם איזה שני מספרים תצפין, עם השניים האחרים תוכל לפענח, שיטה די נחמדה, ויעילה.

קיצר, כל אחד ישתמש במה שנוח לו

שנה טובה!


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
lior066

   10:56   01.10.08   
אל הפורום  
  16. אני לא מסכים יש ייתרון די בולט בין השניים  
בתגובה להודעה מספר 15
 
   נגיד אם אתה מצפין ב RCA אם ה"האקר" או מי שלא ירצה לפרוץ לך ( לא מבין למה ... ) יעלה על המפתח של ההצפנה הוא יכול לפתוח את כל מה שהצפנת...

מבחינת MD5 כל הצפנה לגופה , הכל שם ממודר כל אחד יש לו את ה HASH שלו וה"האקר" יצטרך לעפרוץ כל אחד בתורו.

יש המון תוכנות לפריצת RSA בקלות היום כל חובבן יכול לפרוץ MD5 צריך שלושה דברים בישביל לפרוץ.
1. מחשב ממש ממש חזק כדי להריץ ברוטפורס ולך תידע מה ההצפנה מכילה...
2. RAINBOW TABLE שזה לבד 250 ג'יגה ובוא נגיד שרק למי שממש מתעסק בפריצות ( או ילד ממש משועמם) משתמשים בזה...
3.הרבה מזל בישביל לנחש או לעלות על הסיסמא.

בעקרון אני עובד עם MD5 ממש מרוצה שיטת הצפנה נורא קלה, שתי פונקציות עיקריות שלא מצריכות אותך להכליל את המפתח של ההצפנה אם עולים לך על הקוד מקור..

הצפן ( משהו)
השווה הצפנה ( משהו , המשהו המוצפן )

אין איפה להסתבך פה.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
asco88 
חבר מתאריך 17.6.04
26757 הודעות
   21:15   01.10.08   
אל הפורום  
  17. גם בRSA כל הצפנה לגופה  
בתגובה להודעה מספר 16
 
כל פעם אתה מגריל שני משתנים חדשים, ויוצר מהם את המשתנים החשובים, גם כאן יש לך הצפנה, ופיענוח, ובכל אחד נותנים את הטקסט, שני משתנים, שכל פעם חייבים לתת (שני המשתנים).
אגב אני פשוט לא מבין איך עובד MD5 כלומר, מה מתבצע כשאתה מצפין.
אם נניח בRSA אתה לוקח טקסט ממיר לאסקי, ומערבל בתוך נוסחה שהופכת כל כמה ספרות לדף שלם, אז מה עושה MD5?
אני באמת אשמח לטיפה הסבר


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
lior066

   06:01   02.10.08   
אל הפורום  
  18. הנה מימוש עם הערות , מקווה שתבין פשוט מאוד...  
בתגובה להודעה מספר 17
 
   ערכתי לאחרונה בתאריך 02.10.08 בשעה 06:03 בברכה, lior066
 
הנה קוד מקור למחלקה ב ASP.NET ב VB.NET למימוש הצפנה ב MD5


Public Class MD5

Private EncStringBytes() As Byte
Private Encoder As New UTF8Encoding
Private MD5Hasher As New MD5CryptoServiceProvider

'Encrptes the string in MD5 when passed as a string
Public Function Encrypt(ByVal EncString As String) As String
'Variable Declarations
Dim RanGen As New Random
Dim RanString As String = ""
Dim MD5String As String
Dim RanSaltLoc As String

'Generates a Random number of under 4 digits
While RanString.Length <= 3
RanString = RanString & RanGen.Next(0, 9)
End While

'Converts the String to bytes
EncStringBytes = Encoder.GetBytes(EncString & RanString)

'Generates the MD5 Byte Array
EncStringBytes = MD5Hasher.ComputeHash(EncStringBytes)

'Affixing Salt information into the MD5 hash
MD5String = BitConverter.ToString(EncStringBytes)
MD5String = MD5String.Replace("-", Nothing)

'Finds a random location in the string to sit the salt
RanSaltLoc = RanGen.Next(4, MD5String.Length)

'Shoves the salt in the location
MD5String = MD5String.Insert(RanSaltLoc, RanString)

'Adds 0 for values under 10 so we always occupy 2 charater spaces
If RanSaltLoc < 10 Then
RanSaltLoc = "0" & RanSaltLoc
End If

'Shoves the salt location in the string at position 3
MD5String = MD5String.Insert(3, RanSaltLoc)

'Returns the MD5 encrypted string to the calling object
Return MD5String
End Function


'Verifies the String entered matches the MD5 Hash
Public Function Verify(ByVal S As String, ByVal Hash As String) As Boolean
'Variable Declarations
Dim SaltAddress As Double
Dim SaltID As String
Dim NewHash As String

'Finds the Salt Address and Removes the Salt Address from the string
SaltAddress = Hash.Substring(3, 2)
Hash = Hash.Remove(3, 2)

'Finds the SaltID and removes it from the string
SaltID = Hash.Substring(SaltAddress, 4)
Hash = Hash.Remove(SaltAddress, 4)

'Converts the string passed to us to Bytes
EncStringBytes = Encoder.GetBytes(S & SaltID)

'Encryptes the string passed to us with the salt
EncStringBytes = MD5Hasher.ComputeHash(EncStringBytes)

'Converts the Hash to a string
NewHash = BitConverter.ToString(EncStringBytes)
NewHash = NewHash.Replace("-", Nothing)

'Tests the new has against the one passed to us
If NewHash = Hash Then
Return True
ElseIf NewHash <> Hash Then
Return False
End If
End Function

אני לא כל כך התעמקתי באיך זה נעשה , אני יודע פחות או יותר שזה הופך את הסטרינג שלך לבינארי ומוציא ממנו קוד מסויים לפי המבנה שלו ובונה HASH ואחרי זה משווה את ה HASH כדי לדעת אם זה נכון , כך שלכל רצף שונה של מילים יש HASH שונה.

אם אתה רוצה לבין יותר לעומק יש לך פה הסבר עם דוגמא וצעד אחרי צעד...

http://nsfsecurity.pr.erau.edu/crypto/md5.html


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net