zoukankan      html  css  js  c++  java
  • 密钥导出函数(Key derivation function)

      在密码学中,密钥导出函数(KDF)使用伪随机函数从秘密值(eg.主密钥)导出一个或多个密钥。KDF可用于将密钥扩展到更长的密钥或获得所需格式的密钥(eg.将作为Diffie-Hellman密钥交换的结果的组元素转换为用于AES的对称密钥)。密钥加密哈希函数是用于密钥推导的伪随机函数的流行示例。
    KDFs的使用:
              密钥导出函数通常与非秘密参数一起使用,以从公共秘密值导出一个或多个密钥。这样的使用可以防止获得派生密钥的攻击者学习关于输入秘密值或任何其他导出密钥的有用信息;也可以使用KDF来确保派生密钥具有其他期望的属性,诸如在某些特定加密系统中避免“弱密钥”。
    KDFs最常见的用途是将密码散列的方法来密码验证,我们将非秘密参数称之为salt。KDFs也通常用作多方密钥协商协议的组成部分,这些关键推导函数的示例包括KDF1和ANSI X9.42中的类似功能。特别的,基于HMAC的提取和扩展密钥导出功能(HKDF) 是一种简单的基于HMAC的KDF,可用作各种协议和应用程序中的构建块。
    我们下面针对密钥延伸(key stretching)对KDF进行下一步的描述:
              KDF也用于从秘密密码或密码短语导出密钥的应用程序,密码通常不具有直接用作加密密钥的所需属性。在这样的应用中,通常建议将密钥导出功能故意缓慢,以阻止对密码或密码输入值的暴力攻击或字典攻击。

              这种使用可以表示为DK = KDF(Key,Salt,Iterations),其中DK是派生密钥,KDF是密钥导出函数,Key是原始密钥或密码,Salt是作为密码盐的随机数,Iterations是指子功能的迭代次数。使用派生密钥代替原始密钥或密码作为系统的密钥。盐的值和迭代次数(如果不固定)与散列密码一起存储或以加密消息的明文形式发送。

             暴力攻击的难度随着迭代次数的增加而增加。迭代计数的实际限制是用户不愿容忍登录计算机或看到解密消息的可察觉延迟。使用salt可以防止攻击者预先计算派生密钥的字典。

             类似的,当下还有另一种方法叫做密钥强化(key strengthening),使用随机盐扩展键,但是不像密钥延伸一样可以安全地删除salt。这将强制攻击者和合法用户对salt值执行强力搜索。
    ---------------------
    作者:sjrGCkym
    来源:CSDN
    原文:https://blog.csdn.net/sjrgckym/article/details/78195845
    版权声明:本文为博主原创文章,转载请附上博文链接!

    PBKDF2

    编辑
     
    DK = PBKDF2(P,S,c,dkLen)
    可选项: RPF 基本伪随机函数(hLen表示伪随机函数输出的字节长度)
    输入:
      P 口令,一字节串
      S 盐值,字节串
    c 迭代次数,正整数
    dkLen 导出密钥的指定字节长度,正整数,最大约(2^32-1)*hLen
    输出: DK 导出密钥,长度dkLen字节
  • 相关阅读:
    Java中String与byte[]的转换
    移动端界面设计之尺寸篇(更新)
    移动端开发必晓
    sublime 之 vitage/emmet
    Sublime Text3工具的安装、破解、VIM功能vintage插件教程
    Sublime Text 3 快捷键总结
    iPhone Safari下iframe不显示滚动条无法滚动的解决方法
    名片设计尺寸及名片设计的注意事项
    转:『引』最全前端资源汇集
    (转)详解css3弹性盒模型(Flexbox)
  • 原文地址:https://www.cnblogs.com/feng9exe/p/10039323.html
Copyright © 2011-2022 走看看