辛辛苦苦的劳动成果,如何上把锁?

简介: 辛辛苦苦的劳动成果,如何上把锁?

宁教我负天下人,休叫天下人负我。

大家都知道枭雄曹操,错杀了吕伯奢之后的这句名言 - 宁教我负天下人,休叫天下人负我。把这句话写在这里,并不表示我们同意他的观点,而是这种人从古至今,由中而外,大有人在。看看周围,不法侵占别人劳动成果的事情,比比皆是。所以我们能做的,可能就是以小人之心,度小人之腹,尽可能多加防范。

就拿工程师们来说,干一个项目,画板子调程序,辛辛苦苦几个月,甚至一年半载的,产品终于上市大卖开始赚钱。这时候如果有人把程序读出来,然后复制出产品,卖得还更便宜,实在是一件让人吐血的事情。

把程序加密,无疑是一个防小人的好办法。我们这里介绍一种比较流行的加密方式,它利用芯片里的唯一识别码,为每一个MCU单独授权,这样即使程序被读出,也没有办法在其它的MCU上运行。我们讲一下它的工作原理,以及一款可以实现加密量产,可以授权烧写次数的工具。

  1. 一种流行的加密方法

如上图中所示,MCU中一般都有一个UDID(Unique Device IDentifier),这个唯一识别码,每一个MCU都是不一样的,烧写工具可以读出这个UDID,然后通过算法,计算出一个授权(License),烧写MCU程序(APP)时,连同这个授权码一起写入Flash。当MCU上电运行时,也读取自己的UDID,然后通过同一算法,计算出授权码,并和工具写入的授权码做对比,如果不相同就拒绝执行下面的程序。下面举个例子。

如图,三个MCU的UDID分别为1,3,5。通过一种算法计算出1和3的授权码分别为0和4。从1和3号读出的程序,写入5号是无法运行的。因为我们会发现,程序用5计算出的授权码,不等于0也不等于4,无法通过比对,程序无法继续运行。

那么我们能根据1和3的已知信息,反推出算法吗?可以试试看,经过一番猜测,我们发现一个算法,(UDID–1)*2 对于1号和3号MCU完全适用。我们不由得一阵兴奋!经过计算(5-1)*2=8,我们把8写入5号MCU的授权地址,然后发现程序并没有运行???

怎么回事?因为算法是猜测的。我们完全可以反推出另外一种算法:(UDID-1)*(UDID-1)。对于1和3也是适用的,但对于5,结果是16。

对于简单的数字尚且如此,而UDID一般长度有16个字节,用户再混入自己的密钥数字,用加减乘除,异或等运算计算出授权,想要逆向推测出算法还是很难的。如果想要进一步增加安全性,可以采用更高级别的加密算法。

为了增加逆向分析的难度,还可以在用户程序中综合采取一些措施。比如:不直接读取UDID和授权码,而是用两个地址运算生成读取地址;使用inline内联函数;多次校验并延时触发等。

加密算法

对称加密

加密和解密使用同一密钥。所以发送端和接收端都要对密钥严格保密。对称加密好处是运算速度快。常用的有DES,3DES,AES,以及我国的SM1。

非对称加密

它的密钥分为公钥和私钥,公钥是公开的,但是从公钥无法推导出私钥。非对称加密的好处是,只需要保密私钥就行了。其缺点是消耗资源比较多,运算速度慢。常用的有RSA,ECC以及我国的SM2。

反过来,我们也可以用私钥加密,然后用公钥解密,这种方式通常用来完成签名的验证。把MCU的UDID读出来,用私钥加密生成授权码,和应用程序一起写入MCU的Flash,然后MCU的应用程序就可以用公钥完成授权码的验证。采用非对称加密算法的好处是,即使算法是公开的,公钥也是公开的,别人只要没有获得私钥,就没办法为其它MCU生成授权码。

加密算法的安全性

首先想个问题,如果我们给家里装个防盗门,是越坚固的越好吗?好像没毛病。但仔细一想还真不是这样,我们大多数家里安装的,并不一定是市场上最好最贵的。

加密算法也没有绝对的安全。理论上只有一次一密,也就是采用跟明文长度一样密钥,而且只使用一次,才是绝对的安全。所以我们采用什么算法,要根据我们的实际需要。在一定时间长度内,如果破解的代价远大于所获得的价值,我们就认为是安全的。还有就是尽可能使用长一些的密钥,跟踪密码学的最新动态。

安全单片机和普通单片机

对于任何加密方式,密钥的存储是安全的关键。对于普通的单片机,现在一般在Flash区都会有保护字节,可以设置成编程后无法读出。密钥存储在里面,通过常规手段是无法读到的。但是对于非常规手段,这种安全性就不够了。

但是对于非常规手段,就无效了。比如把MCU的外壳溶解掉,然后暴露出内部的硅片,这样就可以直接观察,修改里面存储的内容。所以对于安全等级高的应用,比如金融等,也要求MCU具有更高级别的安全防范措施。这种MCU会把密钥存储在一小块儿RAM里,用电池供电。为了保证存储在RAM里的密钥不被非法读走,采取各种防范措施。比如芯片外部有探测引脚,一旦发现外部电路被破坏,马上销毁密钥。在芯片内部,用金属丝网包住关键区域,一旦被破坏,也会销毁密钥。同时这种MCU内部也会集成随机数生成,硬加密算法模块等,加速加解密的运算速度。

采用哪种单片机,也要根据实际需要来决定。

加密量产工具

创芯工坊的Power Writer,是一款挺实用的量产烧录工具。它可以通过MCU的唯一识别码,对每一个MCU生成单独的授权。加密算法有消耗资源特别少的向量矩阵加密,也有加密级别更高的ECDSA椭圆数字签名算法,还支持用户使用自己的算法。除此之外,他还能授权烧写的MCU个数,烧写MCU的UDID范围等。用户可以把程序上传到云端,客户联网在线获得授权,进行芯片烧录,也可以把程序加载进烧写器,用户采用离线烧录。

相关文章
|
缓存 监控 前端开发
SPA 首屏加载速度优化
【10月更文挑战第14天】解决 SPA 首屏加载速度慢的问题需要综合运用多种优化策略和技术。通过资源压缩、减少异步请求、优化渲染流程、利用缓存、代码分割、预加载等方法,可以有效提高 SPA 首屏加载速度,为用户提供更好的体验。同时,性能监控和分析是持续优化的关键,应根据实际情况不断调整优化策略。在未来,随着技术的不断发展,我们还需要不断探索新的优化方法和途径,以适应不断变化的需求。
310 56
|
NoSQL Go API
简洁、轻量级的 Go API 框架
简洁、轻量级的 Go API 框架
246 0
如何玩儿转千兆以太网?1000BASE-T1是1000BASE-T的升级版吗?信号地如何接到PE?
如何玩儿转千兆以太网?1000BASE-T1是1000BASE-T的升级版吗?信号地如何接到PE?
|
数据采集 弹性计算 供应链
阿里云服务器包年包月和按量付费有啥区别?
阿里云服务器付费模式包括包年包月、按量付费和抢占式实例。包年包月适合长期稳定使用,价格优惠,支持备案;按量付费适合短期或波动需求,按小时计费,不支持备案;抢占式实例价格低至9折,但可能随时被释放,适合无状态应用。选择时应考虑业务需求的稳定性和成本效益。
295 0
|
机器学习/深度学习 编解码 算法
如何将算法翻译成RTL(零):绪论
如何将算法翻译成RTL(零):绪论
449 0
|
算法 数据安全/隐私保护 C++
AES加密算法(C++实现,附源码)
原创作品,转载请注明出自xelz's blog 博客地址:http://mingcn.cnblogs.com/ 本文地址:http://mingcn.cnblogs.com/archive/2010/10/31/aes_c.
2106 0
|
传感器 数据采集 安全
聊聊身边的嵌入式,你家燃气表是智能的吗?
聊聊身边的嵌入式,你家燃气表是智能的吗?
|
新零售 供应链 搜索推荐
构建全渠道零售平台及营销场景解读
在中国7亿网民线上、线下个性化消费升级的大潮中,如何依靠创新,迎接“新零售”的挑战?
8461 92
|
物联网
如何实现按键的短按、长按检测?
如何实现按键的短按、长按检测?