Jump to content

SHA-3: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
→‎Speed: Removing implication that 512 bits of security is somehow, in any real world sense, more secure than 256 bits, and removing non-neutral wording
→‎Speed in lede: 256 bits of security is every atom in the solar system making 10,000,000 SHAKE256 calculations a second for over 350,000 years; let’s not imply that cutting preimage resistance down to 256 bits decreases real-world security
Line 102: Line 102:
*20 cbp on IA-32+SSE, Intel Core 2 Duo or AMD Athlon 64
*20 cbp on IA-32+SSE, Intel Core 2 Duo or AMD Athlon 64
*12.6 cpb on a typical x86-64-based machine
*12.6 cpb on a typical x86-64-based machine
For the exact SHA3-256 on x86-64, Bernstein measures 11.7&ndash;12.25 cbp depending on the CPU<ref>http://cr.yp.to/hash/sha3opt-20120104.pdf</ref>{{rp|7}}. SHA-3 has been critized for being slow in software &ndash; SHA2-512 is more than twice as fast as SHA3-512 and SHA-1 is more than three times as fast on a Skylake at 3.2 Ghz.<ref name=slow>http://keccak.noekeon.org/is_sha3_slow.html</ref> The authors have reacted to this criticism by suggesting to use SHAKE128 and SHAKE256 instead of SHA3-256 and SHA3-512, at the expense of cutting the preimage resistance in half (but while keeping the collision resistance). With this, performance is on par with SHA2-256 and SHA2-512. To further increase speed, the authors suggest using KangarooTwelve, a variant of Keccak with half the number of rounds (trading safety margin for speed) and using parallelizable tree hashing to exploit the availability of parallelism in the processor.
For the exact SHA3-256 on x86-64, Bernstein measures 11.7&ndash;12.25 cbp depending on the CPU<ref>http://cr.yp.to/hash/sha3opt-20120104.pdf</ref>{{rp|7}}. SHA-3 has been critized for being slow in software &ndash; SHA2-512 is more than twice as fast as SHA3-512 and SHA-1 is more than three times as fast on a Skylake at 3.2 Ghz.<ref name=slow>http://keccak.noekeon.org/is_sha3_slow.html</ref> The authors have reacted to this criticism by suggesting to use SHAKE128 and SHAKE256 instead of SHA3-256 and SHA3-512. With this, performance is on par with SHA2-256 and SHA2-512. To further increase speed, the authors suggest using KangarooTwelve, a variant of Keccak with half the number of rounds (trading safety margin for speed) and using parallelizable tree hashing to exploit the availability of parallelism in the processor.


However, in [[Application-specific integrated circuit|hardware implementations]], SHA-3 is notably faster than all other finalists,<ref>{{Citation |title=Fair and Comprehensive Performance Evaluation of 14 Second Round SHA-3 ASIC Implementations |url=http://csrc.nist.gov/groups/ST/hash/sha-3/Round2/Aug2010/documents/papers/SCHAUMONT_SHA3.pdf |first1=Xu |last1=Guo |first2=Sinan |last2=Huang |first3=Leyla |last3=Nazhandali |first4=Patrick |last4=Schaumont |journal=NIST 2nd SHA-3 Candidate Conference |date=Aug 2010 |accessdate=2011-02-18 |page=12}} Keccak is second only to Luffa, which did not advance to the final round.</ref> and also faster than SHA-2 and SHA-1<ref name=slow/>.
However, in [[Application-specific integrated circuit|hardware implementations]], SHA-3 is notably faster than all other finalists,<ref>{{Citation |title=Fair and Comprehensive Performance Evaluation of 14 Second Round SHA-3 ASIC Implementations |url=http://csrc.nist.gov/groups/ST/hash/sha-3/Round2/Aug2010/documents/papers/SCHAUMONT_SHA3.pdf |first1=Xu |last1=Guo |first2=Sinan |last2=Huang |first3=Leyla |last3=Nazhandali |first4=Patrick |last4=Schaumont |journal=NIST 2nd SHA-3 Candidate Conference |date=Aug 2010 |accessdate=2011-02-18 |page=12}} Keccak is second only to Luffa, which did not advance to the final round.</ref> and also faster than SHA-2 and SHA-1<ref name=slow/>.

Revision as of 10:43, 18 July 2017

Secure Hash Algorithms
Concepts
hash functions, SHA, DSA
Main standards
SHA-0, SHA-1, SHA-2, SHA-3
SHA-3
(Keccak)
General
DesignersGuido Bertoni, Joan Daemen, Michaël Peeters, and Gilles Van Assche.
First published2015
Series(SHA-0), SHA-1, SHA-2, SHA-3
CertificationFIPS PUB 202
Detail
Digest sizesarbitrary
Structuresponge construction
Rounds24 × 5 sub-rounds
Speed12.6 cpb on a typical x86-64-based machine for Keccak-f[1600] plus XORing 1024 bits,[1] which roughly corresponds to SHA3-256.

SHA-3 (Secure Hash Algorithm 3) is the latest member of the Secure Hash Algorithm family of standards, released by NIST on August 5, 2015.[2][3] The reference implementation source code was dedicated to public domain via CC0 waiver.[4] Although part of the same series of standards, SHA-3 is internally quite different from the MD5-like structure of SHA-1 and SHA-2.

SHA-3 is a subset of the broader cryptographic primitive family Keccak (/ˈkɛtʃæk/, or /kɛtʃɑːk/),[5][6] designed by Guido Bertoni, Joan Daemen, Michaël Peeters, and Gilles Van Assche, building upon RadioGatún. Keccak's authors have proposed additional uses for the function, not (yet) standardized by NIST, including a stream cipher, an authenticated encryption system, a "tree" hashing scheme for faster hashing on certain architectures.[7][8], and AEAD ciphers Keyak and Ketje[9][10].

History

The Keccak algorithm is the work of Guido Bertoni, Joan Daemen (who also co-designed the Rijndael cipher with Vincent Rijmen), Michael Peeters, and Gilles Van Assche. It is based on earlier hash function designs PANAMA and RadioGatún. PANAMA was designed by Daemen and Craig Clapp in 1998. RadioGatún, a successor of PANAMA, was designed by Daemen, Peeters, and Van Assche, and was presented at the NIST Hash Workshop in 2006.[11]

In 2006 NIST started to organize the NIST hash function competition to create a new hash standard, SHA-3. SHA-3 is not meant to replace SHA-2, as no significant attack on SHA-2 has been demonstrated. Because of the successful attacks on MD5, SHA-0 and SHA-1,[12] NIST perceived a need for an alternative, dissimilar cryptographic hash, which became SHA-3.

After a setup period, admissions were to be submitted by the end of 2008. Keccak was accepted as one of the 51 candidates. In July 2009, 14 algorithms were selected for the second round. Keccak advanced to the last round in December 2010.[13]

During the competition, entrants were permitted to "tweak" their algorithms to address issues that were discovered. Changes that have been made to Keccak are:[14][15]

  • The number of rounds was increased from 12 + ℓ to 12 + 2ℓ to be more conservative about security.
  • The message padding was changed from a more complex scheme to the simple 10*1 pattern described below.
  • The rate r was increased to the security limit, rather than rounding down to the nearest power of 2.

On October 2, 2012, Keccak was selected as the winner of the competition.[5]

In 2014, the NIST published a draft FIPS 202 "SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions".[16] FIPS 202 was approved on August 5, 2015.[17]

On August 5, 2015 NIST announced that SHA-3 had become a hashing standard.[18]

Design

Illustration of the sponge construction
The sponge construction for hash functions. Pi are input, Zi are hashed output. The unused "capacity" c should be twice the desired resistance to collision or preimage attacks.

SHA-3 uses the sponge construction,[19][20] in which data is "absorbed" into the sponge, then the result is "squeezed" out. In the absorbing phase, message blocks are XORed into a subset of the state, which is then transformed as a whole using a permutation function f. In the "squeeze" phase, output blocks are read from the same subset of the state, alternated with the state transformation function f. The size of the part of the state that is written and read is called the "rate" (denoted r), and the size of the part that is untouched by input/output is called the "capacity" (denoted c). The capacity determines the security of the scheme. The maximum security level is half the capacity.

Given an input bit string N, a padding function pad, a permutation function f that operates on bit blocks of width b, a rate r and an output length d, we have capacity c = b - r and the sponge construction Z = sponge[f,pad,r](N,d), yielding a bit string Z of length d, works as follows:[21]: 18 

  • pad the input N using the pad function, yielding a padded bit string P with a length divisible by r (such that n = len(P)/r is integer),
  • break P into n consecutive r-bit pieces P0, ..., Pn-1
  • initialize the state S to a string of b 0 bits.
  • absorb the input into the state: For each block Pi,
    • extend Pi at the end by a string of c 0 bits, yielding one of length b,
    • XOR that with S and
    • apply the block permutation f to the result, yielding a new state S
  • initialize Z to be the empty string
  • while the length of Z is less than d:
    • append the first r bits of S to Z
    • if Z is still less than d bits long, apply f to S, yielding a new state S.
  • truncate Z to d bits

The fact that the internal state S contains c additional bits of information in addition to what is output to Z prevents the length extension attacks that SHA-2, SHA-1, MD5 and other hashes based on the Merkle-Damgård construction are susceptible to.

In SHA-3, the state S consists of a 5 × 5 array of w = 64-bit words, b = 5 × 5 × w = 5 × 5 × 64 = 1600 bits total. Keccak is also defined for smaller power-of-2 word sizes w down to 1 bit (25 bits total state). Small state sizes can be used to test cryptanalytic attacks, and intermediate state sizes (from w = 8, 200 bits, to w = 32, 800 bits) can be used in practical, lightweight applications.[9][10]

For SHA-3-224, SHA-3-256, SHA-3-384, and SHA-3-512 instances, r is greater than d, so there is no need for additional block permutations in the squeezing phase; the leading d bits of the state are the desired hash. However, SHAKE-128 and SHAKE-256 allow an arbitrary output length, which is useful in applications such as optimal asymmetric encryption padding.

Padding

To ensure the message can be evenly divided into r-bit blocks, padding is required. Keccak uses the pattern 10*1 in its pad10*1 padding function: a 1 bit, followed by zero or more 0 bits (maximum r − 1), and a final 1 bit. The final 1 bit is required for the security proof to work for sponges of different rates, that is, different hash variants (multi-rate padding). Without it, different hash variants of the same short message would be the same up to truncation.

The block permutation

The block transformation f, which is Keccak-f[1600] for SHA-3, is a permutation that uses xor, and and not operations, and is designed for easy implementation in both software and hardware.

It is defined for any power-of-two word size, w = 2 bits. The main SHA-3 submission uses 64-bit words, = 6.

The state can be considered to be a 5 × 5 × w array of bits. Let a[i][ j][k] be bit (5i + j) × w + k of the input, using a little-endian bit numbering convention and row-major indexing. I.e. i selects the row, j the column, and k the bit.

Index arithmetic is performed modulo 5 for the first two dimensions and modulo w for the third.

The basic block permutation function consists of 12 + 2 rounds of five sub-rounds, each individually very simple:

θ
Compute the parity of each of the 5w (320, when w = 64) 5-bit columns, and exclusive-or that into two nearby columns in a regular pattern. To be precise, a[i][ j][k] ← a[i][ j][k] ⊕ parity(a[0...4][ j−1][k]) ⊕ parity(a[0...4][ j+1][k−1])
ρ
Bitwise rotate each of the 25 words by a different triangular number 0, 1, 3, 6, 10, 15, .... To be precise, a[0][0] is not rotated, and for all 0 ≤ t < 24, a[i][ j][k] ← a[i][ j][k−(t+1)(t+2)/2], where .
π
Permute the 25 words in a fixed pattern. a[ j][2i+3 j] ← a[i][ j].
χ
Bitwise combine along rows, using xx ⊕ (¬y & z). To be precise, a[i][ j][k] ← a[i][ j][k] ⊕ ¬a[i][ j+1][k] & a[i][ j+2][k]. This is the only non-linear operation in SHA-3.
ι
Exclusive-or a round constant into one word of the state. To be precise, in round n, for 0 ≤ m, a[0][0][2m−1] is exclusive-ORed with bit m + 7n of a degree-8 LFSR sequence. This breaks the symmetry that is preserved by the other sub-rounds.

Speed

The speed of SHA-3 hashing of long messages is dominated by the computation of f = Keccak-f[1600] and XORing S with the extended Pi, an operation on b = 1600 bits. However, since the last c bits of the extended Pi are 0 anyway, and XOR with 0 is a noop, it is sufficient to perform XOR operations only for r bits (r = 1600 – 2 × 224 = 1152 bits for SHA3-224, 1088 bits for SHA3-256, 832 bits for SHA3-384 and 576 bits for SHA3-512). The lower r is (and, conversely, the higher c = br = 1600 – r), the less efficient the hashing becomes, since more bits of the message can be XORed into the state (a quick operation) before each application of f. The authors report the following speeds for software implementations of Keccak-f[1600] plus XORing 1024 bits,[1] which roughly corresponds to SHA3-256:

  • 57.4 cpb on IA-32, Intel Pentium 3[22]
  • 41 cbp on IA-32+MMX, Intel Pentium 3
  • 20 cbp on IA-32+SSE, Intel Core 2 Duo or AMD Athlon 64
  • 12.6 cpb on a typical x86-64-based machine

For the exact SHA3-256 on x86-64, Bernstein measures 11.7–12.25 cbp depending on the CPU[23]: 7 . SHA-3 has been critized for being slow in software – SHA2-512 is more than twice as fast as SHA3-512 and SHA-1 is more than three times as fast on a Skylake at 3.2 Ghz.[24] The authors have reacted to this criticism by suggesting to use SHAKE128 and SHAKE256 instead of SHA3-256 and SHA3-512. With this, performance is on par with SHA2-256 and SHA2-512. To further increase speed, the authors suggest using KangarooTwelve, a variant of Keccak with half the number of rounds (trading safety margin for speed) and using parallelizable tree hashing to exploit the availability of parallelism in the processor.

However, in hardware implementations, SHA-3 is notably faster than all other finalists,[25] and also faster than SHA-2 and SHA-1[24].

Instances

The NIST standard defines the following instances, for message M and output length d:[21]: 20, 23 

Instance Output
size d
rate r
= block size
capacity c Definition Security Strengths in Bits
Collision Preimage 2nd Preimage
SHA3-224(M) 224 1152 448 Keccak[448](M || 01, 224) 112 224 224
SHA3-256(M) 256 1088 512 Keccak[512](M || 01, 256) 128 256 256
SHA3-384(M) 384 832 768 Keccak[768](M || 01, 384) 192 384 384
SHA3-512(M) 512 576 1024 Keccak[1024](M || 01, 512) 256 512 512
SHAKE128(M, d) d 1344 256 Keccak[256](M || 1111, d) min(d/2,128) ≥min(d,128) min(d,128)
SHAKE256(M, d) d 1088 512 Keccak[512](M || 1111, d) min(d/2,256) ≥min(d,256) min(d,256)

With the following definitions

  • Keccak[c](N, d) = sponge[Keccak-f[1600], pad10*1, r](N, d)[21]: 20 
  • Keccak-f[1600] = Keccak-p[1600, 24][21]: 17 
  • c is the capacity
  • r is the rate = 1600 – c
  • N is the input bit string

Note that the appended postfixes are written as bit strings, not hexadecimal digits.

The SHA3 instances are the drop-in replacements for SHA2, with identical security claims. SHAKE instances are so called XOF's, Extendable Output Functions. For example, SHAKE128(M, 256) can be used as a hash function with a 256 bit length and 128 bit overall security.

Note that all instances append some bits to the message. Since 10*1 padding always adds at least two bits, in byte aligned libraries there are always six unused zero bits. Therefore, these appended extra bits never make the padded message longer.

Security against quantum attacks

There is a general result that quantum computers can perform a structured preimage attack in 2n = 2n/2, with 2n being the classical preimage resistance security. A structured preimage attack implies a second preimage attack[26] and thus a collision attack. It can also perform a birthday attack, thus break collision resistance, in 32n = 2n/3[27] (although that is disputed[28]). This gives the following upper[29] bounds on the quantum security of SHA-3:

Instance Security Strengths in Bits
Collision
(Brassard et al.)
Collision
(Bernstein)
Preimage 2nd Preimage
SHA3-224(M) 74⅔ 112  112 112
SHA3-256(M) 85⅓ 128 128 128
SHA3-384(M) 128 192 192 192
SHA3-512(M) 170⅔ 256 256 256
SHAKE128(M, d) min(d/3,64) min(d/2,64) ≥min(d/2,64) min(d/2,64)
SHAKE256(M, d) min(d/3,128) min(d/2,128) ≥min(d/2,128) min(d/2,128)

It has been shown that the Merkle-Damgård construction, as used by SHA-2, is collapsing and, by consequence, quantum collision-resistant,[30] but for the sponge construction used by SHA-3, the authors provide proofs only for the case that the block function f is not efficiently invertible; Keccak-f[1600], however, is efficiently invertible, and so their proof does not apply.[31] Proofs that claim to include SHA-3 were published by a different working group.[32]

Capacity change controversy

In February 2013 at the RSA Conference, and then in August 2013 at CHES, NIST announced they would select different values for the capacity, i.e. the security parameter, for the SHA-3 standard, compared to the submission.[33][34] The changes caused some turmoil.

The hash function competition called for hash functions at least as secure as the SHA2 instances. It means that a d-bit output should have d/2-bit resistance to collision attacks and d-bit resistance to preimage attacks, the maximum achievable for d bits of output. Keccak's security proof allows an adjustable level of security based on a "capacity" c, providing c/2-bit resistance to both collision and preimage attacks. To meet the original competition rules, Keccak's authors proposed c=2d. The announced change was to accept the same d/2-bit security for all forms of attack and standardize c=d. This would have sped up Keccak by allowing an additional d bits of input to be hashed each iteration. However, the hash functions would not have been drop-in replacements with the same preimage resistance as SHA-2 anymore; it would have been cut in half, making it vulnerable to advances in quantum computing, which effectively would cut it in half once more[26].

In September 2013, Daniel J. Bernstein suggested on the NIST hash-forum mailing list[35] to strengthen the security to the 576-bit capacity that was originally proposed as the default Keccak, in addition to and not included in the SHA-3 specifications.[36] This would have provided at least a SHA3-224 and SHA3-256 with the same preimage resistance as their SHA2 predecessors, but SHA3-384 and SHA3-512 would have had significantly less preimage resistance than theirs. In late September, the Keccak team responded by stating that they had proposed 128-bit security by setting c = 256 as an option already in their SHA-3 proposal.[37] Although the reduced capacity was justifiable in their opinion, in the light of the negative response, they proposed raising the capacity to c = 512 bits for all instances. This would be as much as any previous standard up to the 256-bit security level, while providing reasonable efficiency[38], but not the 384/512 bit preimage resistance offered by SHA2-384/512. The authors tried to justify that with the claim that "claiming or relying on security strength levels above 256 bits is meaningless."

In early October 2013, Bruce Schneier criticized NIST's decision on the basis of its possible detrimental effects on the acceptance of the algorithm, saying:

There is too much mistrust in the air. NIST risks publishing an algorithm that no one will trust and no one (except those forced) will use.[39]

Paul Crowley, a cryptographer and senior developer at an independent software development company, expressed his support of the decision, saying that Keccak is supposed to be tunable and there is no reason for different security levels within one primitive. He also added:

Yes, it's a bit of a shame for the competition that they demanded a certain security level for entrants, then went to publish a standard with a different one. But there's nothing that can be done to fix that now, except re-opening the competition. Demanding that they stick to their mistake doesn't improve things for anyone.[40]

There was also some confusion that internal changes were made to Keccak. The Keccak team clarified this, stating that NIST's proposal for SHA-3 is a subset of the Keccak family, for which one can generate test vectors using their reference code submitted to the contest, and that this proposal was the result of a series of discussions between them and the NIST hash team.[41] Also, Bruce Schneier corrected his earlier statement, saying:

I misspoke when I wrote that NIST made "internal changes" to the algorithm. That was sloppy of me. The Keccak permutation remains unchanged. What NIST proposed was reducing the hash function's capacity in the name of performance. One of Keccak's nice features is that it's highly tunable.[39]

In response to the controversy, in November 2013 John Kelsey of NIST proposed to go back to the original c = 2d proposal for all SHA-2 drop-in replacement instances.[42] These changes were confirmed in the April 2014 draft.[43] This proposal was implemented in the final release standard in August 2015.[2]

The reduced-capacity forms were published as SHAKE128 and SHAKE256, where the number indicates the security level and the number of bits of output is variable, but should be twice as large as the required collision resistance.

Examples of SHA-3 variants

The following hash values are from NIST.gov[44]

SHA3-224("")
6b4e03423667dbb73b6e15454f0eb1abd4597f9a1b078e3f5b5a6bc7
SHA3-256("")
a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a
SHA3-384("")
0c63a75b845e4f7d01107d852e4c2485c51a50aaaa94fc61995e71bbee983a2ac3713831264adb47fb6bd1e058d5f004
SHA3-512("")
a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26
SHAKE128("", 256)
7f9c2ba4e88f827d616045507605853ed73b8093f6efbc88eb1a6eacfa66ef26
SHAKE256("", 512)
46b9dd2b0ba88d13233b3feb743eeb243fcd52ea62b81b82b50c27646ed5762fd75dc4ddd8c0f200cb05019d67b592f6fc821c49479ab48640292eacb3b7c4be

Changing a single bit causes each bit in the output to change with 50% probability, demonstrating an avalanche effect:

SHAKE128("The quick brown fox jumps over the lazy dog", 256)
f4202e3c5852f9182a0430fd8144f0a74b95e7417ecae17db0f8cfeed0e3e66e
SHAKE128("The quick brown fox jumps over the lazy dof", 256)
853f4538be0db9621a6cea659a06c1107b1f83f02b13d18297bd39d7411cf10c

Comparison of SHA functions

In the table below, internal state means the number of bits that are carried over to the next block.

Comparison of SHA functions
Algorithm and variant Output size
(bits)
Internal
state size
(bits)
Block size
(bits)
Rounds Operations Security against collision attacks
(bits)
Security against length extension attacks
(bits)
Performance on Skylake (median cpb)[45] First published
Long messages 8 bytes
MD5 (as reference) 128 128
(4 × 32)
512 4
(16 operations in each round)
And, Xor, Or, Rot, Add (mod 232) ≤ 18
(collisions found)[46]
0 4.99 55.00 1992
SHA-0 160 160
(5 × 32)
512 80 And, Xor, Or, Rot, Add (mod 232) < 34
(collisions found)
0 ≈ SHA-1 ≈ SHA-1 1993
SHA-1 < 63
(collisions found)[47]
3.47 52.00 1995
SHA-2 SHA-224
SHA-256
224
256
256
(8 × 32)
512 64 And, Xor, Or,
Rot, Shr, Add (mod 232)
112
128
32
0
7.62
7.63
84.50
85.25
2004
2001
SHA-384 384 512
(8 × 64)
1024 80 And, Xor, Or,
Rot, Shr, Add (mod 264)
192 128 5.12 135.75 2001
SHA-512 512 256 0[48] 5.06 135.50 2001
SHA-512/224
SHA-512/256
224
256
112
128
288
256
≈ SHA-384 ≈ SHA-384 2012
SHA-3 SHA3-224
SHA3-256
SHA3-384
SHA3-512
224
256
384
512
1600
(5 × 5 × 64)
1152
1088
832
576
24[49] And, Xor, Rot, Not 112
128
192
256
448
512
768
1024
8.12
8.59
11.06
15.88
154.25
155.50
164.00
164.00
2015
SHAKE128
SHAKE256
d (arbitrary)
d (arbitrary)
1344
1088
min(d/2, 128)
min(d/2, 256)
256
512
7.08
8.59
155.25
155.50

References

  1. ^ a b [Keccak implementation overview Version 3.2 http://keccak.noekeon.org/Keccak-implementation-3.2.pdf], section 3.1
  2. ^ a b https://www.nist.gov/itl/csd/201508_sha3.cfm
  3. ^ https://www.nist.gov/manuscript-publication-search.cfm?pub_id=919061
  4. ^ KeccakReferenceAndOptimized-3.2.zip mainReference.c "The Keccak sponge function, designed by Guido Bertoni, Joan Daemen, Michaël Peeters and Gilles Van Assche. For more information, feedback or questions, please refer to our website: http://keccak.noekeon.org/Implementation by the designers, hereby denoted as "the implementer". To the extent possible under law, the implementer has waived all copyright and related or neighboring rights to the source code in this file. http://creativecommons.org/publicdomain/zero/1.0/"
  5. ^ a b "NIST Selects Winner of Secure Hash Algorithm (SHA-3) Competition". NIST. 2012-10-02. Retrieved 2012-10-02.
  6. ^ Cruz, José R.C. (7 May 2013). "Keccak: The New SHA-3 Encryption Standard". Dr. Dobbs.
  7. ^ Guido Bertoni; Joan Daemen; Michaël Peeters; Gilles Van Assche. "The Keccak sponge function family: Specifications summary". Retrieved 2011-05-11.
  8. ^ NIST, Third-Round Report of the SHA-3 Cryptographic Hash Algorithm Competition, sections 5.1.2.1 (mentioning "tree mode"), 6.2 ("other features", mentioning authenticated encryption), and 7 (saying "extras" may be standardized in the future)
  9. ^ a b Daemen, Joan, CAESAR submission: Ketje v1 (PDF)
  10. ^ a b Daemen, Joan, CAESAR submission: Keyak v1 (PDF)
  11. ^ "The road from Panama to Keccak via RadioGatun" (PDF).
  12. ^ Stevens, Marc; Bursztein, Elie; Karpman, Pierre; Albertini, Ange; Markov, Yarik. "The first collision for full SHA-1" (PDF). Retrieved 23 February 2017.
  13. ^ "NIST Computer Security Division - The SHA-3 Cryptographic Hash Algorithm Competition, November 2007 - October 2012".
  14. ^ "Keccak parameter changes for round 2".
  15. ^ "Simplifying Keccak's padding rule for round 3".
  16. ^ "SHA-3 standardization". NIST. Retrieved 2015-04-16.
  17. ^ National Institute of Standards and Technology (Aug 5, 2015). "Federal Information Processing Standards: Permutation-Based Hash and Extendable-Output Functions, etc". Retrieved 5 Aug 2015.
  18. ^ "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-08-05.
  19. ^ "Sponge Functions". Ecrypt Hash Workshop 2007. {{cite web}}: Cite uses deprecated parameter |authors= (help)
  20. ^ "On the Indifferentiability of the Sponge Construction". EuroCrypt 2008. {{cite web}}: Cite uses deprecated parameter |authors= (help)
  21. ^ a b c d http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.202.pdf
  22. ^ "about 41 cycles/byte [...] represents a 40% speedup compared to an implementation using only 32-bit instructions". By formula we obtain
  23. ^ http://cr.yp.to/hash/sha3opt-20120104.pdf
  24. ^ a b http://keccak.noekeon.org/is_sha3_slow.html
  25. ^ Guo, Xu; Huang, Sinan; Nazhandali, Leyla; Schaumont, Patrick (Aug 2010), "Fair and Comprehensive Performance Evaluation of 14 Second Round SHA-3 ASIC Implementations" (PDF), NIST 2nd SHA-3 Candidate Conference: 12, retrieved 2011-02-18 Keccak is second only to Luffa, which did not advance to the final round.
  26. ^ a b http://cr.yp.to/hash/quantumsha3-20101112.pdf
  27. ^ https://link.springer.com/chapter/10.1007%2FBFb0054319 citeseerx
  28. ^ http://cr.yp.to/hash/collisioncost-20090823.pdf
  29. ^ http://www.scottaaronson.com/papers/collision.pdf
  30. ^ https://eprint.iacr.org/2016/508.pdf
  31. ^ https://eprint.iacr.org/2017/282.pdf
  32. ^ https://eprint.iacr.org/2017/302.pdf
  33. ^ John Kelsey. "SHA3, Where We've Been, Where We're Going" (PDF). RSA Conference 2013.
  34. ^ John Kelsey. "SHA3, Past, Present, and Future". CHES 2013.
  35. ^ "NIST hash forum mailing list".
  36. ^ "The Keccak SHA-3 submission" (PDF). 2011-01-14. Retrieved 2014-02-08.
  37. ^ "On 128-bit security".
  38. ^ "A concrete proposal". 2 October 2013.
  39. ^ a b "Schneier on Security: Will Keccak = SHA-3?".
  40. ^ "LShift: Why I support the US Government making a cryptography standard weaker".
  41. ^ "Yes, this is Keccak!".
  42. ^ "Moving Forward with SHA-3" (PDF).
  43. ^ NIST Computer Security Division (CSD). "SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions" (PDF). NIST.
  44. ^ "NIST.gov – Computer Security Division – Computer Security Resource Center".
  45. ^ "Measurements table". bench.cr.yp.to.
  46. ^ Tao, Xie; Liu, Fanbao; Feng, Dengguo (2013). Fast Collision Attack on MD5 (PDF). Cryptology ePrint Archive (Technical report). IACR.
  47. ^ Stevens, Marc; Bursztein, Elie; Karpman, Pierre; Albertini, Ange; Markov, Yarik. The first collision for full SHA-1 (PDF) (Technical report). Google Research.
    • Marc Stevens; Elie Bursztein; Pierre Karpman; Ange Albertini; Yarik Markov; Alex Petit Bianco; Clement Baisse (February 23, 2017). "Announcing the first SHA1 collision". Google Security Blog.
  48. ^ Without truncation, the full internal state of the hash function is known, regardless of collision resistance. If the output is truncated, the removed part of the state must be searched for and found before the hash function can be resumed, allowing the attack to proceed.
  49. ^ "The Keccak sponge function family". Retrieved 2016-01-27.

External links