Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1634569
  • 博文数量: 197
  • 博客积分: 10046
  • 博客等级: 上将
  • 技术积分: 1983
  • 用 户 组: 普通用户
  • 注册时间: 2006-08-07 12:36
个人简介

在外企做服务器开发, 目前是项目经理, 管理两个server开发的项目。不做嵌入式好久了。

文章分类
文章存档

2011年(2)

2010年(6)

2009年(18)

2008年(30)

2007年(100)

2006年(41)

分类: LINUX

2007-03-29 11:24:09

我们在商业开发常常碰到这样的问题需要解决:
 
1> 在我们的商业开发中,我们需要加密保护我们发布的firmware , 不让竞争对手,甚至客户看到firmware的实际内容。
 
2> 用户在我们公司网站上download到一版firmware后, 如何知道这就是一个可以信任的firmware 呢? 或者说如何保证就是我们公司的firmware呢?而不是别人假冒的呢? (一旦别人假冒的话, 万一upgrade到自己的开发板子里面岂不是就瘫痪了(当然我们的upgrade的程序会进行判断的,不会发生那样的事情)
 
 关于如何加密我们的bin file ,以确保不会被别人看到实际的内容。



为此, 我专门到google上搜索到 了两个软件 , 一个是 mcrypt ,另外就是 gpg 。
mcrypt 功能强大, 最适合用来加密linux下面的文件。

1>   mcrypt , 他是UNIX上 crypt(1)的替代版本,
功能更强大, 支持的算法更多 。 而且可逆(这才是最重要的)
crypt(1) 因为美国的限制 ,而不能出口到别的国家, 因而有了mcrypt 。 我已经
porting到arm板子上来。 总共需要3个软件包。

它的用法如下: 比如 我们已经有了 file.tgz
加密:  mcrypt file.tgz
    输入密码: 12345
   确认:     12345
OK ..........  生成 file.tgz.nc

解密:  mcrypt -d file.tgz.nc
输入密码:12345
OK .............


需要的软件包:

mcrypt 和 libmcrypt

Note: libmcrypt用2.5.8 (当前最新的) ,  mcrypt用2.6.4, 不要最新的2.6.5在
Redhat和Fedora上面configure之后无法生成config.h 导致make有问题, 2.6.4就
ok,没有这个问题。

另外还需要mhash的软件
包:
目前的版本好:0.9.8.1

在实际操作中, 我们的产品提供一个web页面, 其中就有一个upgrade的界面, 后台有cgi的支持,
当然cgi里面的解密的密码是事先约定好的。 比如就是12345  。 当用户点击upgrade 按钮的时候 , 我们会把用户的firmware upload到板子上去,然后,用这个约定的密码进行解密,如果无法解密说明就不是我们公司发布的firmware,就会放弃当前的upgrade 操作, 并提示用户check这个firmware来源是否可靠,并联系我们公司的销售人员!
 
 
 
2> 要解决第二个问题就要利用数字签名的功能了:
但是我觉得PGP 对于改善我们的整个的firmware的版本发布,好处是巨大的。
比如 ,我们可以用pgp ,对每个发布的版本都用我们公司的 private key 进
行签名加密。 我们可以把我们的public key 放在网上,供用户下载,用户拿到我们
的firmware 后, 用我们公司的的public key 对其进行解密 ,因为只有public key才可
以解密成功, 这就说明了, 用户拿到的firmware一定是我们Sercomm自己发布的,否
则就不是。
 
下面是在pc上试验的结果:
 
对于 ,文件签名我只是在PC上试验了一下, 还不错, 因为有个文件使用汇编写的,
我不熟悉汇编, 所以没有成功porting到arm板子上去试验。


GPG即GNU Privacy Guard,它是加密工具PGP(Pretty Good Privacy )的非商业化版
本,用于对Email、文件及其他数据的收发进行加密与验证,确保通信数据的可靠性和
真实性。本文将对GPG技术及相关工具进行介绍,旨在帮助网上冲浪者之间“真诚”交
流。


用免费GPG加密收发Email
http://netsecurity.51cto.com/art/200512/15011.htm

如何应用GPG加密使您的信息安全保障无忧



使用GnuPG对文件进行加密




下面是我在pc上试验的结果:


在bob 的pc上:
 生成密钥:
 gpg --gen-key

 导出密钥:
 gpg --export >bob.gpg 也可以加一个-a 参数以生成
 ASCII 文件,而不是二进制的

 然后发给对方(kate) , 可以利用ftp ,ssh等等。



 Kate
 导入bob的public key:
 gpg --import bob.gpg

 签名:
 gpg --sign-key

 此时, 如果bob用自己的private key 加密了一个文件。gpg --clearsign
 mymessage.txt 会生成 mymessage.txt.asc


 那么 kate如何解开呢?
 $kate: gpg -d mymessage.txt.asc > mymessage.txt


 ---------现在kate 已经导入了 bob的 public key , 那么kate也可以加密数据,
 只有bob能解开。 (用bob的public key加密 , 只有bob的private key能解开)

 kate 加密: gpg -r -a --encrypt kate-bob.txt
 然后, 会生成 kate-bob.txt.asc 文件 。


 bob受到后, 解开: gpg -d kate-bob.txt.asc
 输入自己的密码即可解开了。


阅读(2784) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~