SHA-2 疑似コード

SHA-2

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/11/24 18:47 UTC 版)

疑似コード

SHA-256アルゴリズムの疑似コードは以下の通りである。

Note 1: All variables are 32 bit unsigned integers and addition is calculated modulo 232
Note 2: For each round, there is one round constant k[i] and one entry in the message schedule array w[i], 0 ≤ i ≤ 63
Note 3: The compression function uses 8 working variables, a through h
Note 4: Big-endian convention is used when expressing the constants in this pseudocode,
    and when parsing message block data from bytes to words, for example,
    the first word of the input message "abc" after padding is 0x61626380

Initialize hash values:
(first 32 bits of the fractional parts of the square roots of the first 8 primes 2..19):
h0 := 0x6a09e667
h1 := 0xbb67ae85
h2 := 0x3c6ef372
h3 := 0xa54ff53a
h4 := 0x510e527f
h5 := 0x9b05688c
h6 := 0x1f83d9ab
h7 := 0x5be0cd19

Initialize array of round constants:
(first 32 bits of the fractional parts of the cube roots of the first 64 primes 2..311):
k[0..63] :=
   0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
   0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
   0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
   0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
   0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
   0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
   0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
   0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2

Pre-processing:
append the bit '1' to the message
append k bits '0', where k is the minimum number >= 0 such that the resulting message
    length (modulo 512 in bits) is 448.
append length of message (without the '1' bit or padding), in bits, as 64-bit big-endian integer
    (this will make the entire post-processed length a multiple of 512 bits)

Process the message in successive 512-bit chunks:
break message into 512-bit chunks
for each chunk
    create a 64-entry message schedule array w[0..63] of 32-bit words
    (The initial values in w[0..63] don't matter, so many implementations zero them here)
    copy chunk into first 16 words w[0..15] of the message schedule array

    Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array:
    for i from 16 to 63
        s0 := (w[i-15] rightrotate 7) xor (w[i-15] rightrotate 18) xor (w[i-15] rightshift 3)
        s1 := (w[i-2] rightrotate 17) xor (w[i-2] rightrotate 19) xor (w[i-2] rightshift 10)
        w[i] := w[i-16] + s0 + w[i-7] + s1

    Initialize working variables to current hash value:
    a := h0
    b := h1
    c := h2
    d := h3
    e := h4
    f := h5
    g := h6
    h := h7

    Compression function main loop:
    for i from 0 to 63
        S1 := (e rightrotate 6) xor (e rightrotate 11) xor (e rightrotate 25)
        ch := (e and f) xor ((not e) and g)
        temp1 := h + S1 + ch + k[i] + w[i]
        S0 := (a rightrotate 2) xor (a rightrotate 13) xor (a rightrotate 22)
        maj := (a and b) xor (a and c) xor (b and c)
        temp2 := S0 + maj
 
        h := g
        g := f
        f := e
        e := d + temp1
        d := c
        c := b
        b := a
        a := temp1 + temp2

    Add the compressed chunk to the current hash value:
    h0 := h0 + a
    h1 := h1 + b
    h2 := h2 + c
    h3 := h3 + d
    h4 := h4 + e
    h5 := h5 + f
    h6 := h6 + g
    h7 := h7 + h

Produce the final hash value (big-endian):
digest := hash := h0 append h1 append h2 append h3 append h4 append h5 append h6 append h7

ch および maj の計算は、SHA-1と同様の手法により最適化できる。

SHA-224は本質的にSHA-256と同じであるが、以下の点が異なる。

  • 初期値 h0 から h7 が異なる
  • h7 を除去することで出力が得られる
SHA-224 initial hash values (in big endian):
(The second 32 bits of the fractional parts of the square roots of the 9th through 16th primes 23..53)
h[0..7] :=
    0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4

SHA-512の構造は本質的にSHA-256と同じであるが、以下の点が異なる。

  • メッセージが512ビットごとではなく1024ビットごとのチャンクに分けられる
  • 初期値とラウンド定数が64ビットに拡張されている
  • ラウンド数が64から80に変更されている
  • メッセージ配列wは64個の32ビットワードではなく、80個の64ビットワードを持つ
  • メッセージ配列wを拡張するためのループは16~63ではなく16~79
  • ラウンド定数が最初の80個の素数 2..409 に基づいている
  • 演算に用いられるワード長が64ビットである
  • 末尾に追加されるメッセージ長が128ビットのビッグエンディアンである
  • シフトとローテートの数が異なる
SHA-512 initial hash values (in big-endian):

h[0..7] := 0x6a09e667f3bcc908, 0xbb67ae8584caa73b, 0x3c6ef372fe94f82b, 0xa54ff53a5f1d36f1, 
           0x510e527fade682d1, 0x9b05688c2b3e6c1f, 0x1f83d9abfb41bd6b, 0x5be0cd19137e2179

SHA-512 round constants:

k[0..79] := [ 0x428a2f98d728ae22, 0x7137449123ef65cd, 0xb5c0fbcfec4d3b2f, 0xe9b5dba58189dbbc, 0x3956c25bf348b538, 
              0x59f111f1b605d019, 0x923f82a4af194f9b, 0xab1c5ed5da6d8118, 0xd807aa98a3030242, 0x12835b0145706fbe, 
              0x243185be4ee4b28c, 0x550c7dc3d5ffb4e2, 0x72be5d74f27b896f, 0x80deb1fe3b1696b1, 0x9bdc06a725c71235, 
              0xc19bf174cf692694, 0xe49b69c19ef14ad2, 0xefbe4786384f25e3, 0x0fc19dc68b8cd5b5, 0x240ca1cc77ac9c65, 
              0x2de92c6f592b0275, 0x4a7484aa6ea6e483, 0x5cb0a9dcbd41fbd4, 0x76f988da831153b5, 0x983e5152ee66dfab, 
              0xa831c66d2db43210, 0xb00327c898fb213f, 0xbf597fc7beef0ee4, 0xc6e00bf33da88fc2, 0xd5a79147930aa725, 
              0x06ca6351e003826f, 0x142929670a0e6e70, 0x27b70a8546d22ffc, 0x2e1b21385c26c926, 0x4d2c6dfc5ac42aed, 
              0x53380d139d95b3df, 0x650a73548baf63de, 0x766a0abb3c77b2a8, 0x81c2c92e47edaee6, 0x92722c851482353b, 
              0xa2bfe8a14cf10364, 0xa81a664bbc423001, 0xc24b8b70d0f89791, 0xc76c51a30654be30, 0xd192e819d6ef5218, 
              0xd69906245565a910, 0xf40e35855771202a, 0x106aa07032bbd1b8, 0x19a4c116b8d2d0c8, 0x1e376c085141ab53, 
              0x2748774cdf8eeb99, 0x34b0bcb5e19b48a8, 0x391c0cb3c5c95a63, 0x4ed8aa4ae3418acb, 0x5b9cca4f7763e373, 
              0x682e6ff3d6b2b8a3, 0x748f82ee5defb2fc, 0x78a5636f43172f60, 0x84c87814a1f0ab72, 0x8cc702081a6439ec, 
              0x90befffa23631e28, 0xa4506cebde82bde9, 0xbef9a3f7b2c67915, 0xc67178f2e372532b, 0xca273eceea26619c, 
              0xd186b8c721c0c207, 0xeada7dd6cde0eb1e, 0xf57d4f7fee6ed178, 0x06f067aa72176fba, 0x0a637dc5a2c898a6, 
              0x113f9804bef90dae, 0x1b710b35131c471b, 0x28db77f523047d84, 0x32caab7b40c72493, 0x3c9ebe0a15c9bebc, 
              0x431d67c49c100d4c, 0x4cc5d4becb3e42b6, 0x597f299cfc657e2a, 0x5fcb6fab3ad6faec, 0x6c44198c4a475817]

SHA-512 Sum & Sigma:

S0 := (a rightrotate 28) xor (a rightrotate 34) xor (a rightrotate 39)
S1 := (e rightrotate 14) xor (e rightrotate 18) xor (e rightrotate 41)

s0 := (w[i-15] rightrotate 1) xor (w[i-15] rightrotate 8) xor (w[i-15] rightshift 7)
s1 := (w[i-2] rightrotate 19) xor (w[i-2] rightrotate 61) xor (w[i-2] rightshift 6)

SHA-384は本質的にSHA-512と同じであるが、以下の点が異なる。

  • 初期値 h0 から h7 が異なる
  • h6 および h7 を除去することで出力が得られる
SHA-384 initial hash values (in big-endian):

h[0..7] := 0xcbbb9d5dc1059ed8, 0x629a292a367cd507, 0x9159015a3070dd17, 0x152fecd8f70e5939, 
           0x67332667ffc00b31, 0x8eb44a8768581511, 0xdb0c2e0d64f98fa7, 0x47b5481dbefa4fa4

SHA-512/tは本質的にSHA-512と同じであるが、以下の点が異なる。

  • 初期値 h0 から h7SHA-512/t IV generation function によって与えられる
  • h0 から h7t ビット目までで切り詰めることで出力が得られる
  • t が384となることは認められていない(SHA-384を使うべきである)
  • t が224および256であるものが認定されている

  1. ^ a b c Dmitry Khovratovich, Christian Rechberger and Alexandra Savelieva (2011). “Bicliques for Preimages: Attacks on Skein-512 and the SHA-2 family”. IACR Cryptology ePrint Archive 2011:286. http://eprint.iacr.org/2011/286.pdf. 
  2. ^ a b c Mario Lamberger and Florian Mendel (2011). “Higher-Order Differential Attack on Reduced SHA-256”. IACR Cryptology ePrint Archive 2011:37. http://eprint.iacr.org/2011/037.pdf. 
  3. ^ SHA2とは”. 2022年7月9日閲覧。
  4. ^ Licensing Declaration for US patent 6829355.. https://datatracker.ietf.org/ipr/858/ 2008年2月17日閲覧。. 
  5. ^ Collisions for Hash Functions MD4,MD5,HAVAL-128andRIPEMD. https://eprint.iacr.org/2004/199.pdf 2022年4月28日閲覧。. 
  6. ^ Finding Collisions in the Full SHA-1. https://www.iacr.org/archive/crypto2005/36210017/36210017.pdf 2022年4月28日閲覧。. 
  7. ^ Federal Register / Vol. 72, No. 212 (PDF)”. Federal Register. Government Printing Office (2007年11月2日). 2022年4月24日閲覧。
  8. ^ NIST Selects Winner of Secure Hash Algorithm (SHA-3) Competition”. NIST (2012年10月2日). 2012年10月2日閲覧。
  9. ^ NIST (August 2015). SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions. doi:10.6028/NIST.FIPS.202. https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.202.pdf 2021年4月24日閲覧。. 
  10. ^ “Announcing Approval of Federal Information Processing Standard (FIPS) 202, SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions, and Revision of the Applicability Clause of FIPS 180-4, Secure Hash Standard”. (2015年8月5日). https://www.federalregister.gov/articles/2015/08/05/2015-19181/announcing-approval-of-federal-information-processing-standard-fips-202-sha-3-standard 
  11. ^ Federal Register Notice 02-21599, Announcing Approval of FIPS Publication 180-2
  12. ^ FIPS 180-2 with Change Notice 1
  13. ^ Federal Register Notice E8-24743, Announcing Approval of FIPS Publication 180-3
  14. ^ a b FIPS SP 800-107 Recommendation for Applications Using Approved Hash Algorithms
  15. ^ a b FIPS SP 800-57 Recommendation for Key Management: Part 1: General
  16. ^ NIST Algorithm Examples, Secure Hashing
  17. ^ FIPS SP 800-131A Recommendation for Transitioning the Use of Cryptographic Algorithms and Key Lengths
  18. ^ Federal Register Notice 2012-5400, Announcing Approval of FIPS Publication 180-4
  19. ^ NIST Selects Winner of Secure Hash Algorithm (SHA-3) Competition
  20. ^ Debian codebase in Google Code”. Google. 2011年11月8日閲覧。[リンク切れ]
  21. ^ John Markoff, A Tool to Verify Digital Records, Even as Technology Shifts, New York Times, January 26, 2009
  22. ^ RFC 5702
  23. ^ Ulrich Drepper, Unix crypt with SHA-256/512
  24. ^ NIST's March 2006 Policy on Hash Functions”. NIST (2006年3月15日). 2014年1月1日閲覧。
  25. ^ Microsoft Corporation,Overview of Windows XP Service Pack 3
  26. ^ https://security.googleblog.com/2017/02/announcing-first-sha1-collision.html
  27. ^ Ji Li, Takanori Isobe and Kyoji Shibutani, Sony China Research Laboratory and Sony Corporation, Converting Meet-in-the-Middle Preimage Attack into Pseudo Collision Attack: Application to SHA-2
  28. ^ Somitra Kumar Sanadhya and Palash Sarkar (2008). “New Collision attacks Against Up To 24-step SHA-2”. IACR Cryptology ePrint Archive 2008:270. http://eprint.iacr.org/2008/270.pdf. 
  29. ^ Kazumaro Aoki, Jian Guo, Krystian Matusiewicz, Yu Sasaki, and Lei Wang (2009). “Preimages for step-reduced SHA-2”. Advances in Cryptology - ASIACRYPT 2009. Lecture Notes in Computer Science (Springer Berlin Heidelberg) 5912: 578-597. doi:10.1007/978-3-642-10366-7_34. ISBN 978-3-642-10366-7. ISSN 0302-9743. http://link.springer.com/chapter/10.1007%2F978-3-642-10366-7_34. 
  30. ^ Jian Guo, San Ling, Christian Rechberger, and Huaxiong Wang (2010). “Advanced meet-in-the-middle preimage attacks: First results on full Tiger, and improved results on MD4 and SHA-2”. Advances in Cryptology - ASIACRYPT 2010. Lecture Notes in Computer Science (Springer Berlin Heidelberg) 6477: 56-75. doi:10.1007/978-3-642-17373-8_4. ISBN 978-3-642-17373-8. ISSN 0302-9743. http://eprint.iacr.org/2010/016.pdf. 
  31. ^ SHS Validation List
  32. ^ Crypto++ 5.6.0 Benchmarks”. 2014年1月1日閲覧。
  33. ^ AMD Opteron 8354 2.2 GHzプロセッサと64ビット版Linuxによる計測[32]
  34. ^ Announcing the first SHA1 collision”. 2017年2月23日閲覧。
  35. ^ The Sponge Functions Corner”. 2016年1月28日閲覧。
  36. ^ The Keccak sponge function family”. 2016年1月28日閲覧。
  37. ^ a b SUPERCOP Benchmarks Measurements of hash functions, indexed by machine
  38. ^ SUPERCOP Benchmarking Toolkit





英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「SHA-2」の関連用語

SHA-2のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



SHA-2のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアのSHA-2 (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。

©2024 GRAS Group, Inc.RSS