MIDlet签名以及出处鉴定和完整性认证

这段时间对MIDP的安全架构比较关心,主要是保证MIDlet的安全,因此在网上找了很多的网络资源,分析之后,写了这篇记录稿,主要是记录了从MIDlet发布前的签名,到设备上的安装认证等步骤。
1 几个概念

1.RSA –非对称加密算法。这是目前MIDlet数字签名的普遍使用的算法,其内容主要包括一对密匙:
私匙(Private Key):用于数字签名的创建
公匙(Public Key):用于数字签名的验证

2.公钥证书(certificates):即数字证书。其主要内容包括该证书的签发者(Issuer),所有者(Owner),所有者的公匙(Public Key)等,一般符合X509标准;

3.如何自制证书
在$(WTK)/appdb/目录下执行下列命令即可:
(1)keytool -genkey -alias Hempel -keyalg RSA -dname "CN=Hempel Chen, O=Self, OU=Dev, C=CN" -validity 3650 -keypass MIDletSign -keystore mykeystore.sks -storepass MIDletSign
(2)keytool -selfcert -alias Hempel -keypass MIDletSign -keystore mykeystore.sks -storepass MIDletSign
(3)keytool -export -alias Hempel -file Hempel.cer -keystore mykeystore.sks -storepass MIDletSign
至于每个命令行是什么意思,大家看看参数名称应该也知道了,呵呵,网上也有很多的资料。

2 MIDlet签名过程

下面以JDK和WTK自带的签名工具的执行步骤来讲解MIDlet签名过程。以WTK的 apps/UIDemo为例:
1.jarsigner.exe -keystore mykeystore.sks -storepass MIDletSign $apps/UIDemo/bin/UIDemo.jar Hempel
使用keystore.sks中包含的/别名为Hempel的密匙对(由一个私匙和一个公匙组成一个密匙对)/中的私匙来对jar文件进行签名。其结果是在UIDemo.jar/META-INF 目录下多了 Hempel.SF和Hempel.RSA两个文件,并且原来的MAINFEST>MF文件也被更新;

2.java.exe -jar ../bin/JadTool.jar -addcert -alias Hempel -storepass MIDletSign -keystore mykeystore.sks -inputjad ../apps/UIDemo/bin/UIDemo.jad -outputjad UIDemo.jad
将数字证书的内容完成的拷贝到jad文件中去,作为MIDlet-Certificate-1-1这个域的值。(注意:如果是一个标准的商业证书,由于该证书可能是某些中间证书签发的,因此,这一步可能包含MIDlet-Certificate-1-2,MIDlet-Certificate-1-3等域)

3.java.exe -jar ../bin/JadTool.jar -addjarsig -jarfile ../apps/UIDemo/bin/UIDemo.jar -keypass MIDletSign -alias Hempel -storepass MIDletSign -keystore mykeystore.sks -inputjad UIDemo.jad -outputjad ../UIDemo.jad
采用SHA-1算法,对jar文件形成摘要(Digest),然后使用密匙对中的私匙(该私匙是与MIDlet-Certificate-1-1中的公匙对应)对jar文件的摘要进行加密(RSA加密),其计算结果作为MIDlet-Jar-RSA-SHA1这个域的值。
至此,签名完毕。

 

3 安装过程中的出处鉴定

如果MIDlet-Jar-RSA-SHA1属性出现,则JAR文件需要通过证书和签名,进行出处鉴定,这主要是防止有人假冒别人的名义来发布MIDlet。
安装时,设备可以通过其本身已经安装的CA根证书来验证MIDlet套件中的证书链,即jad文件中的属性MIDlet-Certificate-<n>-<m>。如果能过通过MIDlet-Certificate-1-1-> MIDlet-Certificate-1-2-> MIDlet-Certificate-1-3->Root CA Certificate一层一层的验证,即表明此证书是值得信赖的,这是由CA(证书的Issuer)的信誉保证,从而表明该证书中声明的所有者(Owner)确实是这个人。因此也就表明该MIDlet的出处确实是该证书的所有者Owner

 

4 安装过程中的完整性认证

验证完出处后,需要验证MIDlet的完成性,这主要是防止该MIDlet在发布过程中被有意或无疑的更改。
完整性认证步骤如下:
1.从MIDlet-Certificate-1-1证书中提取公匙;
2.使用该公匙对MIDlet-Jar-RSA-SHA1进行解密,得到jar文件的摘要(jar的SHA-1属性);
3.采用SHA-1算法,在设备上对jar文件重新进行计算,生成jar的摘要(Jar的SHA-1);
4.将设备上计算出来的jar的SHA-1属性与第2步中解密得到的jar的SHA-1属性进行对比,如果一致则通过完整性认证;否则表示该MIDlet已经被更改;

关于如何获得证书,网上有很多的相关介绍,不过一般都是要money的。如果只是再自己的模拟器上测试,则可以自己制作证书并认证,呵呵,关于这方面,网上也是大把大把的资料

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值