|
CubeHash is a cryptographic hash function submitted to the NIST hash function competition by Daniel J. Bernstein. CubeHash has a 128 byte state, uses wide pipe construction, and is ARX based. Message blocks are XORed into the initial bits of a 128-byte state, which then goes through an r-round bijective transformation between blocks. The initial NIST proposal ("Cubehash8/1") required about 200 cycles per byte. After clarifications from NIST, the author changed the proposal to Cubehash16/32, which "is approximately 16 times faster than CubeHash8/1, easily catching up to both SHA-256 and SHA-512 on the reference platform" while still maintaining a "comfortable security margin". CubeHash advanced to the second round of the competition, but was not chosen as one of the 5 finalists. The author tuned the parameters further since.〔(【引用サイトリンク】author=Daniel J. Bernstein )〕 ==How it works== This description refers to the latest specification, and not the NIST submission.〔 CubeHash has 5 parameters, a certain instance is denoted by CubeHashi+r/b+f-h. * i is the number of initial rounds * r is the number of rounds per block * b is the block size in bytes, defined for * f is the number of final rounds * h is the size of the hash output in bits, defined for In the original NIST submission, i and f was fixed to 10r. The obsolete notation CubeHashr/b-h indicates i and f being implicitly 10r. The internal state is defined as a five-dimensional array of words (four-byte integers), 0-1 in both dimensions. The words are referred to with their coordinates () to (). The words are treated as little-endian. The internal state is initialized by setting the first three words ((), (), ()) to h/8, b, and r respectively, all other words to zero. The state is then run through i rounds, and the initialization stage is complete. The state is now the Initialization Vector (IV). The IV can be saved and reused for a given combination of h, b, r. The message is padded and split to b-byte blocks. The padding appends a 1 bit, followed by as many 0 bits as necessary to make a complete block. Each block is inputed to by XORing into the first b bytes of the state, and then performing r rounds of transformation. Finally, 1 is XORed to the state word (), and then f rounds of transformation are performed. The output hash is now contained in the first h/8 bytes of this final state. 抄文引用元・出典: フリー百科事典『 ウィキペディア(Wikipedia)』 ■ウィキペディアで「CubeHash」の詳細全文を読む スポンサード リンク
|