To those of us looking at the Hyperledger fabric (HLF) from a hardware point
of view, the current default of using SHA-3 for block hashing, and in other
HLF proposals has been confusing for several reasons:
1. According to NIST:
"NIST encourages application and protocol designers to implement SHA-256
at a minimum for any applications of hash functions requiring
"Currently there is no reason to transition applications from SHA-2 to
(Updated September 14, 2016)
2. Current Intel, IBM and ARM server processors provide instruction set
support for accelerating SHA256.
3. Multiple vendors offer low-cost, low-power ASICs with validated
implementations for accelerating current internet security standards that
include SHA256. Components like these might also prove useful for accelerating
4. Although it is not my area of expertise, I am not aware of any network
security standards that require SHA-3. I do know that the latest draft of the
TLSv1.3 specification does not mention SHA-3:
(Updated October 26, 2016)
We can speculate on whether or not we will see widespread hardware support for
SHA-3 acceleration until or unless SHA-3 becomes part of such a standard.
Given the above, it seems premature for the HLF to default to the use of
SHA-3, which use is pervasive throughout the HLF codebase. I would suggest that
all HLF components of the V1 architecture be immediately modified to default
to the use of the recommended SHA-2 family of hash functions. I consider this a "bug" because it impacts interoperability, and it is important to correct the default behavior prior to the V1 code release.