sha3

package
v0.0.0-...-92cc422 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 21, 2019 License: GPL-3.0, BSD-3-Clause Imports: 5 Imported by: 0

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

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

func New224

func New224() hash.Hash

new224创建新的sha3-224哈希。 它的通用安全强度是224位,可以抵御图像前攻击, 以及112位数据,以防碰撞攻击。

func New256

func New256() hash.Hash

new256创建新的sha3-256哈希。 它的通用安全强度是256位,可以抵御图像前攻击, 以及128位来抵御碰撞攻击。

func New384

func New384() hash.Hash

new384创建新的sha3-384哈希。 它的通用安全强度是384位,可以抵御图像前攻击, 以及192位数据,以防碰撞攻击。

func New512

func New512() hash.Hash

new512创建新的sha3-512哈希。 它的通用安全强度是512位,可以抵御图像前攻击, 和256位,以防碰撞攻击。

func NewKeccak256

func NewKeccak256() hash.Hash

new keccak 256创建新的keccak-256哈希。

func NewKeccak512

func NewKeccak512() hash.Hash

new keccak 512创建新的keccak-512哈希。

func ShakeSum128

func ShakeSum128(hash, data []byte)

shakesum128将任意长度的数据摘要写入哈希。

func ShakeSum256

func ShakeSum256(hash, data []byte)

shakesum256将任意长度的数据摘要写入哈希。

func Sum224

func Sum224(data []byte) (digest [28]byte)

SUM224返回数据的SHA3-224摘要。

func Sum256

func Sum256(data []byte) (digest [32]byte)

SUM256返回数据的SHA3-256摘要。

func Sum384

func Sum384(data []byte) (digest [48]byte)

SUM384返回数据的SHA3-384摘要。

func Sum512

func Sum512(data []byte) (digest [64]byte)

SUM512返回数据的sha3-512摘要。

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个字节的输出。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL