搜索
bottom↓
回复: 58

请教fpga加密方法

[复制链接]

出0入0汤圆

发表于 2017-1-18 09:56:12 来自手机 | 显示全部楼层 |阅读模式
目前准备用stm32配置fpga,方便后续升级,请问有没有什么比较好的方法加密fpga

出0入0汤圆

发表于 2017-1-18 10:10:27 | 显示全部楼层
除非FPGA本身支持,否则,想都不要想。直接挂逻辑分析仪到STM32连接的配置引脚,就把数据搞出来了

出0入91汤圆

发表于 2017-1-18 10:12:05 | 显示全部楼层
本帖最后由 ackyee 于 2017-1-18 10:14 编辑

我的静脉仪用FPGA来做,我打算在周围一圈放上公司LOGO  
即使别人COPY了我的固件跟PCB  但想改LOGO就没那么容易了

现在只是原型机,后面可能有订单了再考虑加密事宜了

出0入0汤圆

 楼主| 发表于 2017-1-18 10:55:12 来自手机 | 显示全部楼层
xivisi 发表于 2017-1-18 10:10
除非FPGA本身支持,否则,想都不要想。直接挂逻辑分析仪到STM32连接的配置引脚,就把数据搞出来了 ...

和外置的加密芯片通讯呢?

出420入0汤圆

发表于 2017-1-18 10:58:22 | 显示全部楼层
买加密功能的fpga

出0入0汤圆

发表于 2017-1-18 11:00:58 | 显示全部楼层
whxiaowang 发表于 2017-1-18 10:55
和外置的加密芯片通讯呢?

这个倒是可以,FPGA的二进制文件几乎不能反编译, 加载配置文件后和专用芯片通信是可以的(通信内容需要经常变,如果对称加密,密钥也要变)

出0入0汤圆

 楼主| 发表于 2017-1-18 11:23:32 来自手机 | 显示全部楼层
xivisi 发表于 2017-1-18 11:00
这个倒是可以,FPGA的二进制文件几乎不能反编译, 加载配置文件后和专用芯片通信是可以的(通信内容需要 ...

现在想的是用环形振荡器产生随机数,有搞过吗?

出0入0汤圆

发表于 2017-1-18 11:33:33 | 显示全部楼层
whxiaowang 发表于 2017-1-18 11:23
现在想的是用环形振荡器产生随机数,有搞过吗?

你这个怎么保证别人不能复制。。

牛人的加密方法是使用非常正弦的波形,在内部进行二倍频,加密的难度都在于怎么生成这个非常正弦的波形

出0入17汤圆

发表于 2017-1-18 11:35:59 | 显示全部楼层
3DA502 发表于 2017-1-18 11:33
你这个怎么保证别人不能复制。。

牛人的加密方法是使用非常正弦的波形,在内部进行二倍频,加密的难度都 ...

加密可以考虑MSCC/ACTEL的FPGA

出0入8汤圆

发表于 2017-1-18 11:43:25 | 显示全部楼层
外置安全芯片。 FPGA判断是否有期望的芯片,如果没有罢工即可。 不过这种芯片要有一定的量才好买。

出0入0汤圆

发表于 2017-1-18 13:05:01 来自手机 | 显示全部楼层
lattice xp2 altera mx10好像都有加密

出0入0汤圆

发表于 2017-1-18 13:09:37 | 显示全部楼层
ackyee 发表于 2017-1-18 10:12
我的静脉仪用FPGA来做,我打算在周围一圈放上公司LOGO  
即使别人COPY了我的固件跟PCB  但想改LOGO就没那么 ...

你好,你的周围打一圈LOGO,是不是在显示界面上啊?

出0入0汤圆

发表于 2017-1-18 13:15:43 | 显示全部楼层
xilinx zynq,自带AES-256。

出0入0汤圆

 楼主| 发表于 2017-1-18 13:18:50 来自手机 | 显示全部楼层
3DA502 发表于 2017-1-18 11:33
你这个怎么保证别人不能复制。。

牛人的加密方法是使用非常正弦的波形,在内部进行二倍频,加密的难度都 ...

环形振荡器产生的随机数随机性相对已经很高了

出0入91汤圆

发表于 2017-1-18 13:45:15 | 显示全部楼层
河图洛书 发表于 2017-1-18 13:09
你好,你的周围打一圈LOGO,是不是在显示界面上啊?

是的  这个也能破解的吗

出0入0汤圆

发表于 2017-1-18 14:21:40 | 显示全部楼层
whxiaowang 发表于 2017-1-18 13:18
环形振荡器产生的随机数随机性相对已经很高了

FPGA做的环形振荡器,做好是可以的(考虑好热噪声和电压,防止出现特定的分布不真随机),随机数只是一个方面。

用外部加密芯片(提供唯一ID、特定鉴别方式、通信数据实时变化),FPGA的配置文件里能鉴别这个ID就可以。也就是说,几乎是一个板子一个配置文件,量小还可以。

出0入0汤圆

 楼主| 发表于 2017-1-18 15:04:03 来自手机 | 显示全部楼层
xivisi 发表于 2017-1-18 14:21
FPGA做的环形振荡器,做好是可以的(考虑好热噪声和电压,防止出现特定的分布不真随机),随机数只是一个 ...

fpga产生随机数,然后发给加密芯片运算,将加密芯片得运算结果与自身运算的结果对比,程序不用每个芯片单独配置。现在环形振荡器写的有问题,三个非门中两个被优化掉了,这个怎么解决?

出0入0汤圆

 楼主| 发表于 2017-1-18 15:04:38 来自手机 | 显示全部楼层
stdio 发表于 2017-1-18 13:15
xilinx zynq,自带AES-256。

这种fpga太贵了,用不起

出0入0汤圆

发表于 2017-1-18 15:08:33 来自手机 | 显示全部楼层
actel A3P060 10块钱左右。

出0入0汤圆

 楼主| 发表于 2017-1-18 15:39:39 | 显示全部楼层
xzyang 发表于 2017-1-18 15:08
actel A3P060 10块钱左右。

现在板子已经做了用的EP2C5

出0入0汤圆

发表于 2017-1-18 15:46:02 | 显示全部楼层
whxiaowang 发表于 2017-1-18 15:04
fpga产生随机数,然后发给加密芯片运算,将加密芯片得运算结果与自身运算的结果对比,程序不用每个芯片单 ...

你做一批板子,里面的加密芯片对同样的数据进行加密,输出结果是否相同?如果相同也是没用的,抄你的板就是了。

另外,防止综合优化,请使用keep约束。

出0入0汤圆

 楼主| 发表于 2017-1-18 16:13:28 | 显示全部楼层
xivisi 发表于 2017-1-18 15:46
你做一批板子,里面的加密芯片对同样的数据进行加密,输出结果是否相同?如果相同也是没用的,抄你的板就 ...

加密结果不同就是要保证随机数随机性高,目前这样写两个非门被优化了
wire    osc_a_temp1,osc_a_temp2,osc_a_temp3/* synthesis keep=1 */;
assign   osc_a_temp2=~osc_a_temp1;
assign   osc_a_temp3=~osc_a_temp2;
assign   osc_a_temp1=~osc_a_temp3;

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入14汤圆

发表于 2017-1-18 16:17:59 | 显示全部楼层
常用的加密芯片有哪些

出0入0汤圆

 楼主| 发表于 2017-1-18 16:25:18 | 显示全部楼层
Pjm2008 发表于 2017-1-18 16:17
常用的加密芯片有哪些

目前用的atsha204a,atmel有很多

出0入0汤圆

发表于 2017-1-18 16:30:03 | 显示全部楼层
本帖最后由 xivisi 于 2017-1-18 16:37 编辑
whxiaowang 发表于 2017-1-18 16:13
加密结果不同就是要保证随机数随机性高,目前这样写两个非门被优化了
wire    osc_a_temp1,osc_a_temp2,o ...


好像,你没有明白我说的意思。

我说的是,你使用的加密芯片,最好是不同的芯片(型号相同),初始条件相同(同时上电),时对同样的数据进行加密时,输出的密文必须是不同的。如果输出的密文相同有什么意义??不能防止抄板,也不能防止枚举攻击。

出0入0汤圆

发表于 2017-1-18 16:36:57 | 显示全部楼层
whxiaowang 发表于 2017-1-18 16:13
加密结果不同就是要保证随机数随机性高,目前这样写两个非门被优化了
wire    osc_a_temp1,osc_a_temp2,o ...

防止综合器优化,给你说了,用keep约束, 如果是 Quartus II 则为 /* synthesis keep="1" */

出0入0汤圆

 楼主| 发表于 2017-1-18 16:40:34 | 显示全部楼层
xivisi 发表于 2017-1-18 16:30
好像,你没有明白我说的意思。

我说的是,你使用的加密芯片,最好是不同的芯片(型号相同),初始条件相 ...

明白你的意思了,我现在的想法是保证每次的加密的数据不一样,

出0入0汤圆

 楼主| 发表于 2017-1-18 16:41:33 | 显示全部楼层
xivisi 发表于 2017-1-18 16:36
防止综合器优化,给你说了,用keep约束, 如果是 Quartus II 则为 /* synthesis keep="1" */ ...

我在定义的时候加了

出0入0汤圆

发表于 2017-1-18 16:56:04 | 显示全部楼层
FPGA是不是有自带配置芯片的?

出0入0汤圆

发表于 2017-1-18 17:05:46 | 显示全部楼层
whxiaowang 发表于 2017-1-18 16:41
我在定义的时候加了

(/* synthesis keep=1 */)
简单弄了个,貌似没有被优化掉


没有加的,是被优化了


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2017-1-18 17:08:02 | 显示全部楼层
测试环境:Quartus II 64bit 13.1.4
测试代码:
  1. module TEST
  2. (
  3.         input        wire        clk,
  4.         output        reg        do
  5. );

  6. wire                 osc_a_temp1,
  7.                         osc_a_temp2,
  8.                         osc_a_temp3/* synthesis keep=1 */;
  9.                        
  10. assign   osc_a_temp2=~osc_a_temp1;
  11. assign   osc_a_temp3=~osc_a_temp2;
  12. assign   osc_a_temp1=~osc_a_temp3;

  13. always @(posedge clk)
  14.         do <= osc_a_temp1;

  15. endmodule
复制代码


出0入71汤圆

发表于 2017-1-18 17:09:41 | 显示全部楼层
用MAX10吧,一片入魂

出0入0汤圆

 楼主| 发表于 2017-1-18 17:22:39 来自手机 | 显示全部楼层
xivisi 发表于 2017-1-18 17:08
测试环境:Quartus II 64bit 13.1.4
测试代码:

rtl级视图呢?

出0入0汤圆

发表于 2017-1-18 17:23:56 | 显示全部楼层

你就 不能自己试试?

出0入0汤圆

 楼主| 发表于 2017-1-18 17:26:34 来自手机 | 显示全部楼层
xivisi 发表于 2017-1-18 17:23
你就 不能自己试试?

不好意思,我的代码跟你一样,rtl视图不对,还没有自己试

出0入0汤圆

发表于 2017-1-18 17:32:07 | 显示全部楼层
whxiaowang 发表于 2017-1-18 17:26
不好意思,我的代码跟你一样,rtl视图不对,还没有自己试



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2017-1-18 17:33:27 来自手机 | 显示全部楼层
xivisi 发表于 2017-1-18 17:32

麻烦了,谢谢

出0入0汤圆

 楼主| 发表于 2017-1-18 21:32:13 | 显示全部楼层

你好,我用quartus 9.1编译结果还是不对

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2017-1-19 09:14:32 | 显示全部楼层
whxiaowang 发表于 2017-1-18 21:32
你好,我用quartus 9.1编译结果还是不对

你这个不是编译结果不对吧

好像是你看的不是detail view,你用的信号是总线形式,所以才会这样显示,不要用总线就可以看清楚了。

出0入0汤圆

发表于 2017-1-19 09:43:15 | 显示全部楼层
whxiaowang 发表于 2017-1-18 15:04
这种fpga太贵了,用不起

综合不贵就十多个美金

出0入0汤圆

发表于 2017-1-20 09:32:06 来自手机 | 显示全部楼层
FPGA配置可以先搞一个小代码进去,这段小代码实现类似Bootload功能,然后再用Bootload加密配置吗?可以的话用片安全芯片模拟配置比较靠谱。安全芯片针对公司有十片的量就可以购买,

出0入0汤圆

 楼主| 发表于 2017-1-20 09:47:57 | 显示全部楼层
sme 发表于 2017-1-19 09:14
你这个不是编译结果不对吧

好像是你看的不是detail view,你用的信号是总线形式,所以才会这样显示,不 ...

请问怎么设置?以前都是直接RTL VIEWER

出0入0汤圆

 楼主| 发表于 2017-1-20 09:48:42 | 显示全部楼层
pldjn 发表于 2017-1-20 09:32
FPGA配置可以先搞一个小代码进去,这段小代码实现类似Bootload功能,然后再用Bootload加密配置吗?可以的话 ...

没见过类似案例

出0入0汤圆

发表于 2017-1-20 09:57:33 | 显示全部楼层
whxiaowang 发表于 2017-1-20 09:47
请问怎么设置?以前都是直接RTL VIEWER

点菜单的technology map viwer,或者你不要用总线形式

出0入0汤圆

发表于 2017-1-20 09:58:25 | 显示全部楼层
几个不同的层面:

# FPGA不需要明面的位流,比如以前Actel的反熔丝。
Xilinx的Spartan 3-AN不在这里边,那个就是S3A粘了一个DataFlash。

# 需要位流但是是加密的(AES或者其它加密方式):
比如Xilinx 7系或更新的产品,eFUSE里烧AES的Key,关JTAG接口,etc;或者电池供电的BRAM保存Key。
其它人无法用JTAG ReadBack获得明文的位流;但能通过配置端口拿密文位流,但由于很难拿到Key,所以无法复制产品。

# 位流明文,使用外置加密芯片通信。
自己做随机数发生器/ADC/其它方法生成随机种子,和外部的加密芯片通信进行授权验证。
用户可以拿到明文位流,但是因为位流很难反向,所以近似认为是安全的。
这里的问题在于:
- 环路振荡器如果被检测出来,很容易被干掉。Lattice的某个FPGA的位流格式好像被反向工程了,所以,这个理论上是可能的。
- 验证逻辑不能用基于BRAM的软核,必须分布式RAM软核/状态机/硬逻辑实现。BRAM的信息在位流里是固定的,很容易被抓出来并反向。

出0入0汤圆

 楼主| 发表于 2017-1-20 10:04:16 | 显示全部楼层
sme 发表于 2017-1-20 09:57
点菜单的technology map viwer,或者你不要用总线形式

你好,按

照你说的可以看到

但是不是三个非门

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2017-1-20 10:07:37 | 显示全部楼层
whxiaowang 发表于 2017-1-20 10:04
你好,按

照你说的可以看到

这已经实现你要的效果了,不是非门是因为它是以逻辑单元显示的,你的组合逻辑(与/或/非/异或 等)都是以这种方框显示的,你双击方框看看。

出0入0汤圆

 楼主| 发表于 2017-1-20 10:10:04 | 显示全部楼层
dr2001 发表于 2017-1-20 09:58
几个不同的层面:

# FPGA不需要明面的位流,比如以前Actel的反熔丝。

目前出于成本考虑只能用你讲的第三种方式,环形振荡器从查阅的资料来看随机性还是很强的,你建议用哪种方式产生呢?

出0入0汤圆

 楼主| 发表于 2017-1-20 10:13:35 | 显示全部楼层
sme 发表于 2017-1-20 10:07
这已经实现你要的效果了,不是非门是因为它是以逻辑单元显示的,你的组合逻辑(与/或/非/异或 等)都是以 ...

非常感谢,点击进去就是非门了。这种环形振荡是不是不支持仿真啊,



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2017-1-20 10:17:04 | 显示全部楼层
whxiaowang 发表于 2017-1-20 10:13
非常感谢,点击进去就是非门了。这种环形振荡是不是不支持仿真啊,

有可能不能直接仿,因为没有初态。

你可以试着将某个信号force成低或高再release,然后就应该正常了。其实,这种电路没必要反,理论上是没错的。

出0入0汤圆

 楼主| 发表于 2017-1-20 10:32:16 | 显示全部楼层
sme 发表于 2017-1-20 10:17
有可能不能直接仿,因为没有初态。

你可以试着将某个信号force成低或高再release,然后就应该正常了。其 ...

主要是想将整个加密部分整体仿真下

出0入0汤圆

发表于 2017-1-20 10:34:57 | 显示全部楼层
whxiaowang 发表于 2017-1-20 10:10
目前出于成本考虑只能用你讲的第三种方式,环形振荡器从查阅的资料来看随机性还是很强的,你建议用哪种方 ...

RingOSC是标准随机数发生的方法之一,这个没问题。
只不过对于明文码流,它有被攻击的可能性而已。

出0入0汤圆

 楼主| 发表于 2017-1-20 10:59:10 | 显示全部楼层
dr2001 发表于 2017-1-20 10:34
RingOSC是标准随机数发生的方法之一,这个没问题。
只不过对于明文码流,它有被攻击的可能性而已。 ...

是的   哪种方法好实现点?环形振荡貌似仿真仿不了

出0入0汤圆

发表于 2017-1-20 14:19:47 | 显示全部楼层
whxiaowang 发表于 2017-1-20 10:59
是的   哪种方法好实现点?环形振荡貌似仿真仿不了


RingOSC仿真要给延迟参数的。

出0入0汤圆

 楼主| 发表于 2017-1-20 22:55:37 来自手机 | 显示全部楼层
dr2001 发表于 2017-1-20 14:19
RingOSC仿真要给延迟参数的。

能将具体点吗?我现在用的是9.1内带的仿真工具

出0入0汤圆

发表于 2017-1-21 11:39:24 来自手机 | 显示全部楼层
加密配置数据流不太好实现,fpga不支持,在配置引脚上可以直接截获。应该让fpga主动检测外部专用芯片,不匹配直接自毁,对地短路应该可以毁掉io引脚吧

出0入0汤圆

 楼主| 发表于 2017-1-21 22:50:54 | 显示全部楼层
sme 发表于 2017-1-20 10:17
有可能不能直接仿,因为没有初态。

你可以试着将某个信号force成低或高再release,然后就应该正常了。其 ...

wire信号没法给初值吧?

出0入0汤圆

发表于 2017-2-7 09:55:50 | 显示全部楼层
学习下加密

出0入0汤圆

发表于 2017-2-7 10:22:14 | 显示全部楼层
3DA502 发表于 2017-1-18 11:33
你这个怎么保证别人不能复制。。

牛人的加密方法是使用非常正弦的波形,在内部进行二倍频,加密的难度都 ...

高手详细说说这个
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-10 13:50

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表