Documentation
¶
Overview ¶
包sha3实现sha-3固定输出长度散列函数和 由FIPS-202定义的Shake变量输出长度哈希函数。
两种类型的散列函数都使用“海绵”结构和keccak 置换。有关详细规范,请参阅http://keccak.noekeon.org/
指导
如果您不确定需要什么功能,请使用Shake256至少64 输出字节。震动实例比sha3实例快; 后者必须分配内存以符合hash.hash接口。
如果需要密钥MAC(消息身份验证代码),请在 输入的密钥,用shake256散列并读取至少32个字节的 输出。
安全优势
sha3-x(x等于224、256、384或512)函数具有安全性 X位图像前攻击的强度。因为它们只产生“x” 输出位,它们的抗碰撞性只有“x/2”位。
shake-256和-128函数具有256和 128 bits against all attacks, provided that at least 2x bits of their output 使用。分别请求超过64或32字节的输出 不要增加震动功能的抗碰撞性。
海绵结构
海绵从公共伪随机构造一个伪随机函数 排列,通过将排列应用于“速率+容量”状态 字节,但隐藏了字节的“容量”。
海绵从零状态开始。使用海绵散列输入,向上 将输入的字节“速率”转换为海绵状态。海绵 然后是“满的”,排列应用于“空的”。这个过程是 重复直到所有输入被“吸收”。然后填充输入。 消化是以同样的方式从海绵中“挤压”出来的,除了输出 output is copied out instead of input being XORed in.
海绵的一般安全强度是参数化的,它等于 容量的一半;容量+速率等于排列的宽度。 由于keccakf-1600排列宽1600位(200字节),这意味着 海绵实例的安全强度等于(1600比特率)/2。
建议
对于大多数新用途,推荐使用震动功能。他们可以生产 任意长度的输出。shake256,输出长度至少为 64字节,针对所有攻击提供256位安全性。Keccak队 建议大多数应用程序从sha2-512升级。(NIST选择了一个 更强壮,但速度慢得多,例如Sha3-512的海绵。)
sha-3函数是sha-2函数的“内嵌”替换。 它们产生相同长度的输出,具有相同的安全强度 抵御所有攻击。这意味着,特别是,sha3-256只有 128位抗碰撞,因为它的输出长度是32字节。
Example (Mac) ¶
k := []byte("this is a secret key; you should generate a strong random key that's at least 32 bytes long") buf := []byte("and this is some data to authenticate") //一个输出为32字节的MAC具有256位的安全性——如果您至少使用一个32字节长的密钥。 h := make([]byte, 32) d := NewShake256() //将密钥写入哈希。 d.Write(k) //现在写数据。 d.Write(buf) //从散列中读取32个字节的输出到h。 d.Read(h)
Output:
Example (Sum) ¶
buf := []byte("some data to hash") //哈希需要64字节长才能具有256位的抗冲突性。 h := make([]byte, 64) //计算一个64字节的buf散列并将其放入h中。 ShakeSum256(h, buf)
Output:
Index ¶
- func New224() hash.Hash
- func New256() hash.Hash
- func New384() hash.Hash
- func New512() hash.Hash
- func NewKeccak256() hash.Hash
- func NewKeccak512() hash.Hash
- func ShakeSum128(hash, data []byte)
- func ShakeSum256(hash, data []byte)
- func Sum224(data []byte) (digest [28]byte)
- func Sum256(data []byte) (digest [32]byte)
- func Sum384(data []byte) (digest [48]byte)
- func Sum512(data []byte) (digest [64]byte)
- type ShakeHash
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
Types ¶
type ShakeHash ¶
type ShakeHash interface { //写将吸收更多的数据进入散列状态。如果输入为 //在从中读取输出后写入。 io.Writer //读取从哈希中读取更多输出;读取会影响哈希的 //状态。(因此,shakehash.read与hash.sum非常不同) //它从不返回错误。 io.Reader //Clone returns a copy of the ShakeHash in its current state. Clone() ShakeHash //重置将ShakeHash重置为其初始状态。 Reset() }
shakehash定义哈希函数的接口 支持任意长度输出。
func NewShake128 ¶
func NewShake128() ShakeHash
new shake128创建一个新的shake128变量输出长度shakehash。 Its generic security strength is 128 bits against all attacks if at 至少使用32个字节的输出。
func NewShake256 ¶
func NewShake256() ShakeHash
newshake256创建一个新的shake128变量输出长度shakehash。 如果 至少使用64个字节的输出。