密码学的相关回忆

如题,算是对自己学过的一门课程的回忆吧,有些零零散散,但至少对自己还是比较有价值的东西。
证书,certificate,是一个绑定,并且一般是有权威机构保证的绑定。
比如我的英语六级证,是“我”和530分的一个绑定,然后由四六级委员会保证,这个保证的具体实现无非是这张纸的防伪措施和四六级委员会数据库里存储的可以查证的信息。
J2ME程序需要花钱签名才能使用一些敏感的API,花钱签名的过程是开发者和自己程序的绑定(其中开发者这个身份是要花钱来买的),这个绑定由商业的签名机构来保证。所以很多像我这样自己写自己用的J2ME开发者会经常诟病这一点,因为那笔钱实在不少。
后来Nokia的SIS程序就出现了Open Sign Online的业务,个人开发者可以通过这个业务来免费绑定你的手机和你的应用程序拷贝,然后你写的SIS就能并且只能在你绑定的那部手机运行了;当然,要绑定你(开发者或开发组织),还是像J2ME一样要花钱的。
其实对于开发者和应用程序的绑定本意是好的,也就是某种程度上保证应用程序的安全性,商业运作下,很多个体开源或者免费的应用程序开发者就很难承担这样一笔费用。我的下一部手机决定入手android系统的手机的原因,也有一部分在这里。其实Google也要求应用程序签名,绑定开发者和应用程序,但是没有要求有权威机构担保,因此也就没什么花费,所以这种绑定的主要用途不在于安全性,而在于android以此可以判断相同名字的两个应用程序是不同的版本还是两个不同的应用程序。
SSL中的基于X.509的证书,绑定了一个实体和一个公钥,一般会由权威机构(某个CA,比如最大的VeriSign)来保证。一个例子,访问https://foo.com,浏览器一瞧https头,知道是SSL协议,于是向foo.com请求,“证书拿来瞧瞧”,于是服务器送过来证书,浏览器就把证书里的数字签名(该证书中除电子签名外的部分用MD5或者SHA算出来Hash值,负责担保的CA用自己的密钥加密该Hash值生成的数据)用证书里说明的CA的公钥解密验证一下,验证通过,则会相信该实体和证书里公钥的绑定。当然有很多SSL网站根本没有CA担保,他们一般会用自己当做CA来计算电子签名什么的,这种叫self-signed certificate,农行的证书版网银就是 ,因此各大浏览器在访问这些网站时就弹出个警告问你是否真的继续访问。其实有些网站的确没有必要去CA那里认证自己的绑定,因为这些网站只不过是想通过SSL这个协议来加密传输的数据罢了,这时候这个证书的绑定的作用就不复存在,只剩下一个提供该网站公钥的用途。附上SSL接下来的工作流程:即便是无法相信这个公钥和该网站在CA那里申请证书的那位仁兄之间的绑定关系,但是至少可以保证这个公钥和当前与浏览器交互某计算机之间的绑定(当然该计算机大多数时候是foo.com的服务器,也可能是黑客的机器或者是黑客的肉鸡,无论是前者和后者,与到CA那里申请证书的那个人类都是有差距的,这个差距都是有安全隐患的),SSL接下来确保的是这两个通信端点之间的数据流是加密的,首先客户端用那个公钥加密一个DES之类的对称密钥,服务方用私钥解开,然后双方使用该对称密钥加密和解密数据。
下面猜测农行证书版网银是如何通过浏览器中导入的证书验明账户的正身的。通常我们使用IE导出一个包含密钥和证书的文件pfx(符合X.509标准),这样我们可以在别的地方使用IE导入该文件使用网银(改下扩展名的话使用firefox也是能导入的,只是农行网银不支持火狐罢了)。导入该文件后,浏览器就有了用户的密钥和证书(包含公钥和农行发给用户证书时附带的电子签名)。浏览器访问农行的证书版网银的链接,浏览器会通过上面讲述过的SSL步骤验证农行的身份并获得其公钥(不过农行没有CA担保,他们搞的是self-signed certificate,所以大多数浏览器就在这时警告你一下 农行自签名了一个证书当做CA,如果事先安装了农行的客户端软件就会附带安装此CA,此CA认证了客户端证书和网银服务器端证书,但在我们客户的浏览器端只会去校验网银服务器整数,个人的客户端证书会提交给农行网银的服务器校验),然后农行就要客户端的证书,客户端提交过去,农行用自己的公钥(用的和我们在客户端浏览器安装的相同的CA证书)解密电子签名并验证之,确信这个证书就是当初自己发给用户的那个,然后通过证书的某些字段获得账户信息,然后二者就开始在加密传输的情况下开始转账支付之类操作了。不过这个加密传输过程使用的对称密钥是哪一方生成和使用哪一方的私钥公钥对传送就不好说了(似乎也无所谓)。所以一般的网银正好是我写的这两个段落的总和。
我所疑惑的是为什么要搞什么ActiveX控件,它实现什么功能,在保证用户安全性方面有什么贡献。就是这个ActiveX,Linux下可用的网银就少得可怜。即便非要写什么控件,完全也可以采用Java来啊,不知道国内这些银行什么时候才能有点进步。题外话:还有中国移动的网上营业厅,非IE就完全玩不动了,号称一天赚3个亿的企业真的连这个都搞不定么?

 

你可能感兴趣的:(android,应用服务器,浏览器,IE,企业应用)