From 7e317d7151691317a5fcd16355700bdfa34131a6 Mon Sep 17 00:00:00 2001 From: Peter Date: Sat, 1 Apr 2023 02:00:47 -0600 Subject: [PATCH] starting inner keccak explanation --- docs/kek/README.md | 97 +++++++++++++++++++++++++++++++++++++- docs/kek/spongecoords.png | Bin 0 -> 27921 bytes docs/kek/spongeparts.png | Bin 0 -> 35131 bytes 3 files changed, 96 insertions(+), 1 deletion(-) create mode 100644 docs/kek/spongecoords.png create mode 100644 docs/kek/spongeparts.png diff --git a/docs/kek/README.md b/docs/kek/README.md index fc66102..deb76f8 100644 --- a/docs/kek/README.md +++ b/docs/kek/README.md @@ -25,13 +25,15 @@ special cases of Keccak. - [Erlang code (fast)](https://github.com/pharpend/kek/blob/8a8a655a80c26ae32763cc25f1e0df8ab0653c82/kek_fast.erl) - [erlang-sha3 library (uses fast version of kek)](https://github.com/zxq9/erlang-sha3/blob/63193654e3c05d8031300ffcd52092f75e8b5c2f/src/sha3.erl#L85-L112) -#### References +### References 1. [Helpful lecture][german-lecture] 2. [Notes for that lecture][german-lecture-notes] 3. [NIST standard][nist-standard] (btw: the double bar notation means "concatenate") 4. [SHA-3 Wikipedia](https://en.wikipedia.org/wiki/SHA-3) +### Pitfalls + #### Pitfall: "fast keccak" versus "clear keccak" The main reference is the "clear" Erlang code. The "fast" version is the @@ -126,6 +128,37 @@ shake(ShakeNumber, Message, OutputBitLength) -> keccak(Capacity, ShakeMessage, OutputBitLength). ``` +#### Pitfall: Greek letter steps require two copies of the sponge to compute + +This is the pitfall I ran into, and it stalled this project for months. I +couldn't figure out what the issue was, and the project was only saved because +Hans took the time to figure out the issue and fix it. The nature of hashing +algorithms is that they are all-or-nothing and are hard to decompose. Usually +when your code doesn't work, you can do some trial and error to figure out +which part of the code is wrong. Not so with hashing. + +This requires a lot of context to explain, and it will make sense when you get +to the point in the document. This algorithm has state, which is a 1600-bit +bit array. And that state gets updated a lot. The updating procedure involves +a lot of `xor`ing this bit against that bit, and computing the parity of this +string of bits, etc. + +A lot of it involves crawling down the bit array one bit at a time, and xoring +the current bit against certain bits from *the original bit array*, and then +keeping a separate copy that has the modifications. + +The mistake I was making was as follows. Let's say that the update to bit 55 +requires xoring it against bit 30. It generally requires xoring against the +**un-updated** bit 30. I didn't catch that detail, and was xoring against the +adulterated bit 30. + +There's simply no way to find this mistake from trial and error. It's too +subtle. + +You can see the commit where Hans fixed my mistake +[here](https://github.com/pharpend/kek/commit/7d67c40e6e1280f4abd4fce9122a71034ebcc142). + + ## SHA-s and SHAKE-s These are the "porcelain" functions that we show to the outside world. These @@ -525,7 +558,69 @@ really_squeeze(WetSponge, OutputBitLength, BitRate, ResultAcc)-> ## Inner Keccak: the kek operation +This is the `f` function that you see in all the documentation. In inner +keccak, the 1600-bit sponge is now thought of as a 5x5x64 3-dimensional array. +![NIST standard, page 11](./spongecoords.png) + +- The input is the 1600-bit sponge. +- The output is a new 1600-bit sponge. +- The sponge is sent through 24 "rounds". +- Each round consists of the 5 greek letter steps. +- Each Greek letter which is a fairly straightforward transformation to the + input bit array. +- The Greek letter steps are called theta, rho, pi, chi, and iota. +- The iota step depends on which round we are in (indexed `0..23`) + +```erlang +%% https://github.com/pharpend/kek/blob/8a8a655a80c26ae32763cc25f1e0df8ab0653c82/kek.erl#L324-L368 + +-spec inner_keccak(Sponge) -> NewSponge + when Sponge :: <<_:1600>>, + NewSponge :: <<_:1600>>. +%% @private +%% the "inner keccak" function, or the 'f' function +%% a bunch of bit bullshit +%% @end + +inner_keccak(Sponge) -> + rounds(Sponge, 24). + + +-spec rounds(Sponge, NumRoundsLeft) -> ResultSponge + when Sponge :: <<_:1600>>, + NumRoundsLeft :: non_neg_integer(), + ResultSponge :: <<_:1600>>. +%% @private +%% do however many rounds +%% @end + +% no rounds left +rounds(FinalSponge, 0) -> + FinalSponge; +rounds(Sponge, NumRoundsLeft) -> + % NRoundsLeft = 24 + % idx0 = 0 + % NRoundsLeft = 1 + % idx0 = 23 + RoundIdx0 = 24 - NumRoundsLeft, + NewSponge = rnd(RoundIdx0, Sponge), + NewNumRoundsLeft = NumRoundsLeft - 1, + rounds(NewSponge, NewNumRoundsLeft). + + + +-spec rnd(RoundIdx0, Sponge) -> NewSponge + when RoundIdx0 :: 0..23, + Sponge :: <<_:1600>>, + NewSponge :: <<_:1600>>. +%% @private +%% do a single round +%% @private + +rnd(RoundIdx0, Sponge) -> + iota(RoundIdx0, chi(pi(rho(theta(Sponge))))). +``` [german-lecture]: https://www.youtube.com/watch?v=JWskjzgiIa4 [german-lecture-notes]: https://www.crypto-textbook.com/download/Understanding-Cryptography-Keccak.pdf diff --git a/docs/kek/spongecoords.png b/docs/kek/spongecoords.png new file mode 100644 index 0000000000000000000000000000000000000000..53e055daf790dda803d402b07f41662db0a22133 GIT binary patch literal 27921 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 literal 0 HcmV?d00001 diff --git a/docs/kek/spongeparts.png b/docs/kek/spongeparts.png new file mode 100644 index 0000000000000000000000000000000000000000..39caf407275614edd676c9222679c72fceb1e74e GIT binary patch literal 35131 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