   Message Digest Algorithm 5   ハッシュ関数の一種   リトルエンディアン   入力    ◦ 任意の長さのメッセージ   出力    ◦ 128ビットの値      (ハッシュ値、メッセージダイジェス...
   エンディアン(endianness)    多バイトのデータをメモリ上に配置する方式の種類のこ    と   ビッグエンディアン    ◦ 0x1234ABCD -> 12 34 AB CD    ◦ 人間にわかりやすい   リトル...
1.   パディングビットの付加2.   長さの付加3.   MDバッファの初期化4.   ワードブロックごとのメッセージ処理5.   出力
1.   パディングビットの付加2.   長さの付加3.   MDバッファの初期化4.   ワードブロックごとのメッセージ処理5.   出力
    メッセージ長を512ビットの整数倍にするため、     パディング(拡張)を行う1.   元のメッセージをビット列に直す2.   ビット1を加える3.   メッセージ長が(512の倍数 – 64)ビットになるま     で     0...
   メッセージが abc の場合abc↓01100001 01100010 01100011↓01100001 01100010 01100011 1↓01100001 01100010 01100011 1  000000……000000...
01100001 01100010 01100011 1 0000000……….00   6   1    6 2      6 3       8   0…........0
1.   パディングビットの付加2.   長さの付加3.   MDバッファの初期化4.   ワードブロックごとのメッセージ処理5.   出力
   パディングする前のメッセージ長の下位64ビット    を    付加する    (この時、下位32ビットを先に付加する)   メッセージ長を64ビットで表す   下位32ビットをStep.1の結果に加える   上位32ビットをさら...
abc↓61626380........0(448 bit)abc -> 24 bit -> 24 -> 0x18 -> 00000000 00000018 (64 bit)                             ↓     ...
1.   パディングビットの付加2.   長さの付加3.   MDバッファの初期化4.   ワードブロックごとのメッセージ処理5.   出力
   メッセージダイジェストを計算するために    4つの8バイト(32bit)バッファを用意する (A, B, C, Dと    する)   A   0x67452301   B   0xefcdab89   C   0x98badc...
   メッセージダイジェストを計算するために    4つの8バイト(32bit)バッファを用意する (A, B, C, Dと    する)                         01   23   45   67   A   0x...
1.   パディングビットの付加2.   長さの付加3.   MDバッファの初期化4.   ワードブロックごとのメッセージ処理5.   出力
   Step2 で作ったパディング済メッセージを64バイトずつ    処理
   61626380........0 00000018 00000000 (128文字)     X [ j ] 0 j 15     X [0] 0x80636261     X [1] 0x00000000         X [1...
   (A, B, C, D)に入っているものを    (AA, BB, CC, DD) にコピー   A   0x67452301   B   0xefcdab89   C   0x98badcfe   D   0x10325476
   F(X,Y,Z) = ( X and Y ) or ( notX and Z )   G(X,Y,Z) = ( X and Z ) or ( Y and notZ )   H(X,Y,Z) = X xor Y xor Z   I(...
32T[i] int 2 sin i   (1 i 64)
   [abcd k s i]で以下の計算を表す    a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s[ABCD 0 7 1]     [DABC 1 12 2]     [CDAB 2 17 3]  ...
   [abcd k s i]で以下の計算を表す    a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s[ABCD 1 5 17]    [DABC 6 9 18]    [CDAB 11 14 19] ...
   [abcd k s i]で以下の計算を表す    a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s[ABCD 5 4 33]    [DABC 8 11 34]    [CDAB 11 16 35]...
   [abcd k s i]で以下の計算を表す    a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s[ABCD 0 6 49]    [DABC 7 10 50]    [CDAB 14 15 51]...
   (AA, BB, CC, DD)を    (A, B, C, D) に加える
1.   パディングビットの付加2.   長さの付加3.   MDバッファの初期化4.   ワードブロックごとのメッセージ処理5.   出力
   A = 0x98500190   B = 0xb04fd23c   C = 0x7d3f96c6   D = 0x727fe128   MD5(“abc”) =    900150983cd24fb0d6963f7d28e17f72
md5のアルゴリズム
Upcoming SlideShare
Loading in...5
×

md5のアルゴリズム

625

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
625
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

md5のアルゴリズム

  1. 1.  Message Digest Algorithm 5 ハッシュ関数の一種 リトルエンディアン 入力 ◦ 任意の長さのメッセージ 出力 ◦ 128ビットの値 (ハッシュ値、メッセージダイジェストなどと呼ばれる)
  2. 2.  エンディアン(endianness) 多バイトのデータをメモリ上に配置する方式の種類のこ と ビッグエンディアン ◦ 0x1234ABCD -> 12 34 AB CD ◦ 人間にわかりやすい リトルエンディアン ◦ 0x1234ABCD -> CD AB 34 12 ◦ コンピュータが処理しやすい
  3. 3. 1. パディングビットの付加2. 長さの付加3. MDバッファの初期化4. ワードブロックごとのメッセージ処理5. 出力
  4. 4. 1. パディングビットの付加2. 長さの付加3. MDバッファの初期化4. ワードブロックごとのメッセージ処理5. 出力
  5. 5.  メッセージ長を512ビットの整数倍にするため、 パディング(拡張)を行う1. 元のメッセージをビット列に直す2. ビット1を加える3. メッセージ長が(512の倍数 – 64)ビットになるま で 0を加える
  6. 6.  メッセージが abc の場合abc↓01100001 01100010 01100011↓01100001 01100010 01100011 1↓01100001 01100010 01100011 1 000000……00000000 (448 bit)
  7. 7. 01100001 01100010 01100011 1 0000000……….00 6 1 6 2 6 3 8 0…........0
  8. 8. 1. パディングビットの付加2. 長さの付加3. MDバッファの初期化4. ワードブロックごとのメッセージ処理5. 出力
  9. 9.  パディングする前のメッセージ長の下位64ビット を 付加する (この時、下位32ビットを先に付加する) メッセージ長を64ビットで表す 下位32ビットをStep.1の結果に加える 上位32ビットをさらに加える
  10. 10. abc↓61626380........0(448 bit)abc -> 24 bit -> 24 -> 0x18 -> 00000000 00000018 (64 bit) ↓ 61626380........0 00000018 00000000 (512 bit)
  11. 11. 1. パディングビットの付加2. 長さの付加3. MDバッファの初期化4. ワードブロックごとのメッセージ処理5. 出力
  12. 12.  メッセージダイジェストを計算するために 4つの8バイト(32bit)バッファを用意する (A, B, C, Dと する) A 0x67452301 B 0xefcdab89 C 0x98badcfe D 0x10325476※バッファ データを一時的に保存しておく記憶領域のこと
  13. 13.  メッセージダイジェストを計算するために 4つの8バイト(32bit)バッファを用意する (A, B, C, Dと する) 01 23 45 67 A 0x67452301 89 ab cd ef B 0xefcdab89 Fe dc ba 98 C 0x98badcfe 76 54 32 10 D 0x10325476※バッファ データを一時的に保存しておく記憶領域のこと
  14. 14. 1. パディングビットの付加2. 長さの付加3. MDバッファの初期化4. ワードブロックごとのメッセージ処理5. 出力
  15. 15.  Step2 で作ったパディング済メッセージを64バイトずつ 処理
  16. 16.  61626380........0 00000018 00000000 (128文字) X [ j ] 0 j 15 X [0] 0x80636261 X [1] 0x00000000  X [14] 0x00000000 X [15] 0x18000000
  17. 17.  (A, B, C, D)に入っているものを (AA, BB, CC, DD) にコピー A 0x67452301 B 0xefcdab89 C 0x98badcfe D 0x10325476
  18. 18.  F(X,Y,Z) = ( X and Y ) or ( notX and Z ) G(X,Y,Z) = ( X and Z ) or ( Y and notZ ) H(X,Y,Z) = X xor Y xor Z I(X,Y,Z) = Y xor ( X or notZ )
  19. 19. 32T[i] int 2 sin i (1 i 64)
  20. 20.  [abcd k s i]で以下の計算を表す a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s[ABCD 0 7 1] [DABC 1 12 2] [CDAB 2 17 3] [BCDA 3 22 4][ABCD 4 7 5] [DABC 5 12 6] [CDAB 6 17 7] [BCDA 7 22 8][ABCD 8 7 9] [DABC 9 12 10] [CDAB 10 17 11] [BCDA 11 22 12][ABCD 12 7 13] [DABC 13 12 14] [CDAB 14 17 15] [BCDA 15 22 16]
  21. 21.  [abcd k s i]で以下の計算を表す a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s[ABCD 1 5 17] [DABC 6 9 18] [CDAB 11 14 19] [BCDA 0 20 20][ABCD 5 5 21] [DABC 10 9 22] [CDAB 15 14 23] [BCDA 4 20 24][ABCD 9 5 25] [DABC 14 9 26] [CDAB 3 14 27] [BCDA 8 20 28][ABCD 13 5 29] [DABC 2 9 30] [CDAB 7 14 31] [BCDA 12 20 32]
  22. 22.  [abcd k s i]で以下の計算を表す a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s[ABCD 5 4 33] [DABC 8 11 34] [CDAB 11 16 35] [BCDA 14 23 36][ABCD 1 4 37] [DABC 4 11 38] [CDAB 7 16 39] [BCDA 10 23 40][ABCD 13 4 41] [DABC 0 11 42] [CDAB 3 16 43] [BCDA 6 23 44][ABCD 9 4 45] [DABC 12 11 46] [CDAB 15 16 47] [BCDA 2 23 48]
  23. 23.  [abcd k s i]で以下の計算を表す a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s[ABCD 0 6 49] [DABC 7 10 50] [CDAB 14 15 51] [BCDA 5 21 52][ABCD 12 6 53] [DABC 3 10 54] [CDAB 10 15 55] [BCDA 1 21 56][ABCD 8 6 57] [DABC 15 10 58] [CDAB 6 15 59] [BCDA 13 21 60][ABCD 4 6 61] [DABC 11 10 62] [CDAB 2 15 63] [BCDA 9 21 64]
  24. 24.  (AA, BB, CC, DD)を (A, B, C, D) に加える
  25. 25. 1. パディングビットの付加2. 長さの付加3. MDバッファの初期化4. ワードブロックごとのメッセージ処理5. 出力
  26. 26.  A = 0x98500190 B = 0xb04fd23c C = 0x7d3f96c6 D = 0x727fe128 MD5(“abc”) = 900150983cd24fb0d6963f7d28e17f72
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×