使用密钥派生函数(KDF)进行密码拉伸

密钥推导功能也称为密码扩展,是密码应用程序(如区块链,匿名p2p应用程序等)的主要部分,其目标是获取密码或密钥,然后根据字节数生成加密货币盟友强大和加密货币密钥在配置中选择。

密码不是直接在加密货币系统中使用的最安全模式,KDF算法通常用于使用输入密码中的较长密钥创建更多随机密钥。

有不同的KDF算法,例如Bcrypt不会为同一给定输入返回相同的输出。这意味着无法使用Bcrypt从给定密码生成相同的密钥。对于给定的输入,其他人总是每次返回相同的结果,这反过来意味着可以从给定的密码生成相同的密钥。

KDF算法基于加密货币散列函数,例如SHA-256,BLAKE-2B或AES加密货币中使用的分组密码,它们使用SALT和胡椒的概念。

KDF算法过程

KDF算法几乎可以在所有编程语言中实现,但在本文中,我将使用GoLang编程语言。

我们将使用GoLang中的pkdf包生成我们的密钥,包的链接是https://godoc.org/golang.org/x/crypto/pbkdf2

下面是我们的KDF算法实现的代码库。

Kdf实现代码库

代码是基于它被很好地评测的事实自我解释,但我将在实现中解释更多关于一些事情。

在第3行-10中,我们导入了要在我们的应用程序中使用的必需包。
第17行以掩码格式从终端获取用户的密码字节。
第25行在byte中创建一个salt,用于out程序。这可以是用户选择的任何随机SALT。
第28行打印出用户输入的原始密码。
第32-34行计算插入密码的sha-256哈希并在终端上打印出来。
第43行根据输入参数获取派生密钥。

func Key(密码,salt()字节,iter,keyLen int,h func()hash.Hash)()byte

包提供的Key函数允许我们自定义输出键的强化级别。以下是我们提供的更改参数。

密码:这是要拉伸的输入密码,类型必须是字节。
Salt:Salt是添加到输入密码的额外层,以使其更加强化。类型必须是字节
iter:迭代次数是在计算派生密钥的散列时迭代的次数。类型必须是Int
KeyLen:这是要返回的建议密钥的长度。类型必须是Int。
h:这是生成密钥时使用的哈希函数
然后返回包含派生密码的输出。

第46行打印出派生密钥,这将是一个非常长的密钥,所以我们需要将它传递到一个SHA-256哈希函数,它在第49行完成。
最后,我们打印出派生密钥的散列值。

通过执行go run main.go运行应用程序会产生以下输出。

1.)原始密码: – > mySecurePassword 2.)哈希密码: – > b6573a02de91d76cc442a6f42aa749c6eee0982c148bb7e9116ee44f93e6807a 3.)KDF密钥: – > cdf347254e0fb199015a2721110c0a1b1bfc4f66f718a712930173f93290ed783e08e5655c57fd608da39269a10708
fbe191b1141c6ea9d97d02f6bfbbd90580a3aed101a627e8e96d5cb5c51e24dbe1d5e2dca531c9f658de77080352a0394bb48af8636b840
358314bfea2c0eb6a411ea36212bd13bd552a29be78e59fab17 4.)散列衍生密钥: – > e6e562be28fc935a2ea2e57f21b018237098aeab64c2621d11627be4e9dfe601

您可能会认为第二个和第四个答案即使长度也产生相同的长度。你是对的,原因是Hash函数总是返回一个修复长度大小,而不管输入的大小。

你可能想问的另一个问题是,为什么我们只能使用哈希函数进行键拉伸,如果它们产生某种随机性和键拉伸。对此的答案是,强制执行哈希函数的结果更容易,而强制KDF算法的暴力计算是昂贵的。

您可以从下面的链接下载代码库,并根据您的需要进行扩展。

谢谢你的阅读

支持并表现出一些爱(Claps)

princesegzy01 / KDF-实施
GoLang中密码扩展的密钥导出函数(KDF)算法的实现… github.com

资讯来源:由0x资讯编译自HACKERNOON。版权归作者所有,原文链接:https://hackernoon.com/password-stretching-using-key-derivation-function-kdf-a5abc570f9e5?source=collection_category—4——0———————–。未经许可,不得转载
提示:投资有风险,入市需谨慎,本资讯不作为投资理财建议。请理性投资,切实提高风险防范意识;如有发现的违法犯罪线索,可积极向有关部门举报反映。
你可能还喜欢