RSS订阅信息安全技术跟踪与研究:技术、平台、会议、论文、产业
你现在的位置:首页 / 学术研究 / 正文

基于PUF的密钥生成器:FPGA实现

0 学术研究 | 2015年5月7日
转载申明:本站原创,欢迎转载。但转载时请保留原文地址。
原文地址:http://www.vonwei.com/post/pufkeyFPGA.html

本文基于物理不可克隆函数PUF提出了一个实用模块化的“密钥生成器设计,并且在FPGA设备上进行了完整的实现和评估。本文设计和实现的PUFKY,号称基于PUF的密钥生成器的第一次完整实现,包含一个PUF,一个纠错码BCH decoder和一个密码熵累加器cryptographic entropy accumulator

大多数密码应用的实现离不开一个安全密钥。安全地生成和存储密钥依赖两点最基本的需求:1)一个真的随机源,保证生成不可预测和唯一的新鲜密钥;(2)一个受保护的存储空间,用于可靠的储存生成的密钥信息,防止其被非授权方获取。从实现的角度来看,这两点需求都不容易满足。首先,不可预测的随机性通常使用伪随机生成器PRNGPseudo-Random Number Generator)来实现,不过终究不是真随机,可以被分析攻破和利用;其次,实现保护存储也是一个很大的挑战,通常导致增加的实现开销以及受限的应用,而且即便使用高级的物理保护机制,也无法防止专业的攻击者。

基于PUF的密钥生成器可以很好的满足以上两点需求,其将设备独有的随机指纹经过处理后转换为密钥。首先,这种方法不需要PRNG,随机性已经可以由设备本身提供;其次,也不需要一个保护的非易失性存储空间NVM,基于设备随机指纹可以按需重新生成相同的密钥。不过,PUF响应通常存在噪声(noisy)而且低熵(low-entropy),因此基于PUF的密钥生成器需要面临两个挑战:消除噪声,增加可靠性到实用可接受的要求;压缩足够的熵来达到固定长度的密钥。模糊提取器Fuzzy Extractor可以很好满足这两点。

本文构建的PUFKY体系如下图所示:

该体系采用“Syndrome Construction”方法来构造Secure SketchingSS[注,之前的博客专门介绍了FESS]。这种构造方法主要使用二进制线性分组码C(n,k,t)来进行构造,该分组码的校验矩阵为H。如何选取合适的线性分组码很重要。通常的方式是使用一种分组码(常用的是BCH码),如最初的基于SRAM PUFSSFE构造;不过作者通过对“Efficient Helper

Data Key Extractor on FPGAs (CHES 2008)”的分析发现使用分组码的组合级联形式有更大的优势(在参数限制方面),于是采用了双码级联的方式,使用Repetition CodeCREP)作为一个内部编码(an inner code),然后使用一个BCH codeCBCH)作为一个外部编码(an outer code)。

         另外,基于PUF生成密钥通常采用模糊提取器FE,即组合一个SS和一个强随机提取器Ext。这需要对随机源的最小熵作一个很强的假设,而且使用Ext会导致熵流失很多,使得密钥生成不是很实用。本篇基于另一种方法,即基于伪随机数发生器实现熵累加(entropy accumulator)。NIST SP 800-90A规范(Sect. 10.4)和NIST sp800-108规范实际上都介绍了使用密码哈希函数来进行熵的累积,进而生成需要长度的密钥,要累积的熵至少要达到生成密钥的长度。

         具体实现在一个低端FPGAXilinx Spartan-6)板子上,主要目标是为嵌入式系统提供解决方案,因此要求实现的性能消耗尽可能小。PUF采用的是ROPUFRing Oscillator PUF,环形振荡器),需要振荡器的规模为(a*b)。哈希算法采用比较新的研究成果,即轻量级的SPONGENThttps://sites.google.com/site/spongenthash/上有其详细介绍和源码实现)。ROPUF相关的参数主要有三个(l,pe,ρ),其中lPUF输出响应的长度,pePUF的最大比特错误率,ρPUF输出响应的熵密度。最终生成密钥的需求由两个参数(m,pfail)来表示,m是目标密钥的长度,pfail表示失败率。ROPUF的体系如下图:

一个参考实现:

目标是生成密钥m = 128位,失败率pfail不大于10-9,实现参数过程大致如下:

1)选择(l = 42, pe = 13%, ρ = 97.95%)ROPUF,实现53*16个振荡器,即a = 53b=16

2SS使用CREP(7,1,3)CBCH(318,174,17)的级联形式,对于每42位的PUF响应,REP码产生36位的辅助数据,并输出6位给BCHBCH会生成144位的辅助数据,并提供318位数据给熵累积器(即哈希函数)。

3ROPUF生成a*l=2226个比特位数据,其中包含a*l*ρ=2180.4位的熵。总共辅助数据长度为53*36+144=2052位,这也是SS过程损失的熵,因此,SS后剩余的熵为2180.4-2052=128.4位,通过使用SPONGENT-128哈希函数,可以将这些熵积累在一个m=128位的密钥中。

4FPGA平台上实现PUFKY共用了1162个切片(slices),其中82%用于实现ROPUF,其余18%用于密钥生成逻辑单元(REP解码37个,BCH syndrome计算72个,BCH解码112个,SPONGENT128哈希22个,辅助数据RAM 38个)。

5)获取128位密钥共花费约5.62毫秒(@54MHz),其中PUF输出花费4.59毫秒,其它用时稍微大一点的是BCH解码。

 

这里参考实现给出的是生成128位的强密钥,可以采用类似PUFKY的模块化体系设计生成其它密钥参数的密钥生成器。使用基于PUF的密钥相比传统密钥生成方法有很多优势,最明显的两个是:(1)不需要保护NVM来长期存储密钥,使用PUF可以在需要时重新生成;(2)密钥在本质上与特点的平台实体绑定,在防伪或者软硬件绑定应用等方面会有很大的用处。

随着物联网的发展,可以想象未来所有嵌入式设备上都自带PUF,或者通过连接器连接一个PUF,并实现身份识别、认证、加解密等安全功能。在这种意义上,PUF的安全性还需要进一步的认证和实践证明。



  • ------------------分隔线----------------

  • 如果感兴趣,欢迎关注本站微信号,跟踪最新博文信息,手机微信扫一扫下面的二维码,即可关注!
  • 微月信公众号
  • 推荐您阅读更多有关于“ 物理不可克隆函数PUF  密钥生成   ”的文章

    请填写你的在线分享代码
    上一篇:浅谈加密这把双刃剑下一篇:漫威电影:复仇者联盟2 预习

    猜你喜欢

    评论列表:

    发表评论

    必填

    选填

    选填

    必填,不填不让过哦,嘻嘻。

    记住我,下次回复时不用重新输入个人信息

    本站介绍
    最近发表
    本年最热文章
    本月最热文章
    网站分类
    文章归档