android安全学习之1—什么是数字签名、数字证书

大概对加解密机制进行了学习,以下是自己对一些概念的理解。

  • 加密:

加密就是为了让别人看不懂,加密前的东东称为明文,加密后的为密文。例如我把写给susan的信进行了加密,明文是:12,经过加密后变成了:56,这就是加密。加密是结合加密算法和密钥完成的。

  • 密钥:

就是密码嘛,微信密码啥的,一样的道理。

  • 加密算法:

就是如何去加密,例如上面将12加密变成56,我的加密算法是原数字每一位+2+n,这里的n是我的密码,即密钥。这里我将密钥设置为2,则第一位由1变成了5,第二位变成了6。当然这只是一个非常简单的例子,只是为了便于理解。记得以前看过一本书上讲过,密码学里对算法公开,密钥是不公开的。细想,加密算法公开类似于开源,有助于对算法的优化和不断改进。而密钥的不公开,则保证了数据的安全性。加密算法又包括对称加密算法和非对称加密算法。

  • 对称加密算法和非对称加密算法:

对称加密算法的大概意思就是加密和解密用的是同一个密钥(算法是算法,密钥是密钥,相辅相成)。例如A需要写一封加密信给B,A写完后用自己的密钥(记为密钥A)利用对称加密算法(记为对称加密算法A)完成了加密,然后发送给B,B收到后首先需要解密,只有借助密钥A利用对称加密算法A才能正确对信件进行解密(只有加密算法和密钥都正确才能正确解密)。对称加密算法的缺点非常明显,B如何才能得到A的密钥?一旦A将密钥通过网络等手段传送给B,密钥就有泄露的可能。非对称加密算法解决了这个问题。
非对称加密算法有两个密钥,成对出现。通过一个密钥加密,必须通过另外一个密钥进行解密,分别称为公钥A和私钥A,通过公钥A进行加密的东东,必须经过私钥A进行解密才行。这样A就可以将自己的公钥共享出去,A将信件通过自己的私钥A进行加密,B可以利用A共享的公钥A进行解密。非对称加密解决了对称加密密钥共享的问题。

  • 数字签名:

签名,在信件后面署上自己的亲笔签名,证明这封信是你写的。数字签名,顾名思义利用电脑等制作的数字的签名。数字签名的主要作用是防篡改,防伪造。
数字签名使用了上述的非对称加密。如何来做的呢?
我要向susan写一封信,先用Hash函数对我的信件进行hash,得到的hash值为信件的摘要,然后用我的私钥对这个摘要进行加密(加密后的摘要就是数字签名),最后将信件和数字签名一起发送给susan.
susan收到信后,用我的公钥解密数字签名(我的公钥是公开的),成功解密表示这封信是我写的,然后再将信件内容进行hash,和解密的hash值进行比对,如果一样,表示信件内容完整,没有被修改。
通过上面的例子可以看出来, 通过数字签名,能够证明这个信件是我写的,同时可以证明信件信息的完整性。

  • 数字证书:

但是上面还有一个问题,如果susan那里的我的公钥是假的,被别人换过的,例如susan的电脑被黑客入侵,公钥被黑客替换,这样别人就能冒名顶替我给susan发信。怎么解决这个问题?
有个公立的组织,证书颁发机构 (CA)。证书颁发机构是一个类似公证人的实体, 它可以颁发数字证书,对证书进行签名以验证其有效性,以及跟踪已吊销或过期的证书。我可以去CA,让CA对我的公钥和其他一些信息利用CA的私钥进行加密,生成数字证书!例如IE浏览器中就有很多公开的CA机构发布的自己的数字证书,里面包含自己的公钥(CA机构的)。
这样我以后再写信给susan的时候,可以在信件上附上数字签名的同时,也附上数字证书。Susan收到信件后,利用CA机构提供的公钥,对这个CA证书进行解密,解密后得到我的公钥,然后再对数字签名进行解密,保证了我这个身份无法被篡改!
下面是一个X.509 v3格式的数字证书,证书中包括的选项可以帮助我们理解。
The structure of an X.509 v3 digital certificate is as follows:

•   Version
•   Serial Number
•   Algorithm ID
•   Issuer 颁发机构
•   Validity
•   Not Before
•   Not After
•   Subject 颁发给谁
•   Subject Public Key Info
•   Public Key Algorithm 公钥加密算法
•   Subject Public Key 公钥
•   Issuer Unique Identifier (optional)
•   Subject Unique Identifier (optional)
•   Extensions (optional)
•   ...
•   Certificate Signature Algorithm   CA对证书签名的算法
•   Certificate Signature   CA对证书的签名,利用这个就能利用浏览器CA的公钥验证证书是否合法,是否未被篡改。

你可能感兴趣的:(android安全学习之1—什么是数字签名、数字证书)