加密基础知识

加密算法分类:
对称加密算法(又称私钥加密):AES DES、TripleDES、RC2、RC4、RC5和Blowfish等。
  效率高
  DES 56位,废弃
  AES 128位 加密强度是DES的1021倍,美国国家标准

非对称加密算法(又称公钥加密):RSA DSA
  生成一对密钥,公钥,私钥。
  公钥用来加密和验证签名,私钥用来解密和签名。
  算法复杂,需要大量计算,效率低。

Hash算法(单向加密):

密钥的指纹:就是通过Hash算法算出来的指纹,用来核实密钥是否相同!
  指纹是鉴别位置不同的两个密钥是否相同的常用的一种密码学技术,用于不可能逐位对比两个密钥的情况。
  指纹,是根据密钥计算出来的一个长度较短的值。它的原理与检验和类似,用于验证一串信息的不可替换性。
  假设A得到了一个号称是B的公钥,于是A打电话给B,然后A和B都查看公钥的指纹,如果两个指纹相符,则可确保此公钥确实来自B。

密钥服务器:用来存放公钥,通过KEY ID进行索引。

CA证书:包含发行机构信息和公钥!通过Hash算法验证证书真伪!SSL使用证书核实身份。

----------------------------------------------------------------------
签名原理
双方使用同样的密钥对数据进行加密和解密,这种加密方式被称作对称加密,对应的密钥就被称作对称密钥。常用的对称加密算法,如RC4、3DES、AES等,都具有高效的优点,即使是普通PC机也可以在短时间内使用这些算法对大量数据进行加解密。

相对于对称加密,非对称加密(或称公钥加密)则很好地克服了这个缺陷。非对称加密需要使用不止一个,而是一对密钥——一个公钥和一个私钥。明文数据使用公私钥对中的一个密钥加密后,只能由对应的另一个密钥解密。应用非对称加密时,用户需要妥善保管私钥,不得外泄或丢失,同时公开公钥。

消息摘要是将一段任意长度的消息转化成一个固定长度的短文本串的过程。对于信息安全领域所使用的摘要算法(如常用的MD5、SHA1),极难找到具有相同摘要的两段不同的消息。

至此,保密性、完整性和身份验证都圆满地得到了解决。完整的数据传输过程如下:

发件人
	对消息进行数字签名
		计算消息摘要
		用自己的私钥加密消息摘要,得到数字签名
	加密签名后的消息
		随机生成一个对称密钥
		用对称密钥加密消息和数字签名,得到消息密文
		用收件人的公钥加密对称密钥,得到对称密钥密文
		将对称密钥密文和消息密文合并后发送给收件人
收件人
	解密
		用自己的私钥解密对称密钥
		用对称密钥解密消息密文得到消息明文和数字签名
	校验数字签名
		计算消息摘要
		用发件人的公钥解密数字签名,得到原始消息摘要
		比对两个消息摘要
每个公钥有一个对应的8位KEY ID
如果我们把公钥都发布到一个公共的地方,然后只在纸上互相交换8位的Key ID,再用Key ID到这个公共的地方下载对应的公钥,就可以安全且方便地交换公钥了。而这个公共的地方,就是密钥服务器(Key Server)。GnuPG Shell内置了对密钥服务器的支持,可以直接向服务器发布新密钥或通过Key ID获取已经发布到服务器上的其他密钥。其使用方法也比较简单直接,这里就不赘述了。

或者通过物理方式交换公钥,避免公钥被篡改。

参考
http://blog.liancheng.info/?p=338
---------------------------------------------------------------------
SSL原理
http://xiejin2008.javaeye.com/blog/720760

1.服务器通过证书将公钥给与客户端,客户端根据证书确认服务器的真实身份。
  (客户端反过来将证书给服务器,可以让服务器确认客户端的身份)
2.通过公钥,私钥来交换真正通信时使用的对称密钥
3.通过对称密钥进行通信

证书:通过非对称密钥加密签名过的信息文件,证书包含了发行机构,发行机构的域名,已经公钥。证书末尾对签名的信息进行了签名,以保证信息没有被篡改,通过证书,客户端可以确认公钥的可靠性

具体过程:
1.客户端向服务器请求链接
2.服务器返回证书
3.客户端验证证书,随机生成对称密钥,用公钥加密对称密钥,发回服务器
4.服务器用私钥揭开公钥加密的对称密钥,然后用对称密钥开始与客户端通信。

----------------------------------------------------------
数字证书认证

CA 证书认证机构
CA(Certificate Authority)是数字证书认证中心的简称,是指发放、管理、废除数字证书的机构。CA的作用是检查证书持有者身份的合法性,并签发证书(在证书上签字),以防证书被伪造或篡改,以及对证书和密钥进行管理。

CA根证书,用户的证书是被CA认证机构的根证书认证的。会形成证书信任链,最终由根证书结束。

CA也拥有一个证书(内含公钥),当然,它也有自己的私钥,所以它有签字的能力。网上的公众用户通过验证CA的签字从而信任CA,任何人都应该可以得到CA的证书(含公钥),用以验证它所签发的证书。
如果用户想得到一份属于自己的证书,他应先向CA提出申请。在CA判明申请者的身份后,便为他分配一个公钥,并且CA将该公钥与申请者的身份信息绑在一起,并为之签字后,便形成证书发给那个用户(申请者)。
如果一个用户想鉴别另一个证书的真伪,他就用CA的公钥对那个证书上的签字进行验证(如前所述,CA签字实际上是经过CA私钥加密的信息,签字验证的过程还伴随使用CA公钥解密的过程),一经验证通过,该证书就被认为是有效的。
CA除了签发证书之外,它的另一个重要作用是证书和密钥的管理。
由此可见,证书就是用户在网上的电子个人身份证,同日常生活中使用的个人身份证作用一样。CA相当于网上公安局,专门发放、验证身份证。

---------------------------------------------------------
X.509标准
数字证书格式
--------------------------------------------------------
X.500协议 目录服务协议

LDAP Lightweight Directory Access Protocol,轻量级目录访问协议。它是基于X.500标准的,但是简单多了并且可以根据需要定制。与X.500不同,LDAP支持TCP/IP,这对访问Internet是必须的。
--------------------------------------------------------
OCSP(Online Certificate status Protocol)在线证书状态协议

-----------------------事例------------------------------
xuhejie@xuhejie-desktop:~/note$ gpg --list-key
/home/xuhejie/.gnupg/pubring.gpg
--------------------------------
pub   2048R/10C49A72 2010-10-23
uid                  soulxu <[email protected]>
sub   2048R/7528D4A4 2010-10-23

pub   2048R/67D305B1 2010-11-13
uid                  [email protected] <[email protected]>
sub   2048R/E7E9FE4E 2010-11-13

xuhejie@xuhejie-desktop:~/note$ gpg --list-secret-key
/home/xuhejie/.gnupg/secring.gpg
--------------------------------
sec   2048R/10C49A72 2010-10-23
uid                  soulxu <[email protected]>
ssb   2048R/7528D4A4 2010-10-23

sec   2048R/67D305B1 2010-11-13
uid                  [email protected] <[email protected]>
ssb   2048R/E7E9FE4E 2010-11-13

#pub   2048R/10C49A72 此为KEY ID
#使用gpg --export 导出的是公钥
#--list-key默认输出的是私钥
#gpg --gen-key用来生成密钥对


--------------------------------------------------
gpg介绍:
支持的算法:
	公钥: RSA, RSA-E, RSA-S, ELG-E, DSA
	对称加密: 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH, CAMELLIA128, 
		        CAMELLIA192, CAMELLIA256
	散列: MD5, SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
	压缩: 不压缩, ZIP, ZLIB, BZIP2

gpg --gen-key 生成密钥
gpg --list-keys 列出所有公钥
gpg --list-secret-keys 列出所有私钥
gpg --delete-secret-keys [keyid] 删除私钥 如果存在公钥和私钥,需先删除私钥
gpg --delete-keys [keyid] 删除公钥
gpg --export [keyid] > outfile.asc 导出公钥
gpg --print-md [算法] [文件] 计算散列

gpg -r [公钥] -e [文件] 使用指定公钥加密
gpg -d [文件] 使用密钥解密指定文件

gpg --edit-key 编辑签名,如--trust修改信任度
--------------------------------------------------


密钥库文件格式(Keystore)和证书文件格式(Certificate)

密钥库文件格式【Keystore】
 格式     :  JKS 
 扩展名  : .jks/.ks
 描述     : 【Java Keystore】密钥库的Java实现版本,provider为SUN
 特点     :  密钥库和私钥用不同的密码进行保护
 
 格式     :  JCEKS 
 扩展名  :  .jce
 描述     : 【JCE Keystore】密钥库的JCE实现版本,provider为SUN JCE
 特点     :  相对于JKS安全级别更高,保护Keystore私钥时采用TripleDES
 
 格式     :  PKCS12
 扩展名  :  .p12/.pfx
 描述     : 【PKCS #12】个人信息交换语法标准
 特点     :  1、包含私钥、公钥及其证书
               2、密钥库和私钥用相同密码进行保护
 
 格式     :  BKS 
 扩展名  : .bks
 描述     :  Bouncycastle Keystore】密钥库的BC实现版本,provider为BC
 特点     :  基于JCE实现
 
 格式     : UBER
 扩展名  : .ubr
 描述     : 【Bouncycastle UBER Keystore】密钥库的BC更安全实现版本,provider为BC

证书文件格式【Certificate】 
格式          :  DER 
扩展名       :  .cer/.crt/.rsa
描述          : 【ASN .1 DER】用于存放证书 
特点          :  不含私钥、二进制
 
格式          :  PKCS7 
扩展名       : .p7b/.p7r 
描述          : 【PKCS #7】加密信息语法标准
特点          : 1、p7b以树状展示证书链,不含私钥
                  2、p7r为CA对证书请求签名的回复,只能用于导入
 
格式          :  CMS 
扩展名       :  .p7c/.p7m/.p7s 
描述          : 【Cryptographic Message Syntax】 
特点          : 1、p7c只保存证书
                  2、p7m:signature with enveloped data
                  3、p7s:时间戳签名文件
 
格式          :  PEM 
扩展名       : .pem 
描述          : 【Printable Encoded Message】 
特点          : 1、该编码格式在RFC1421中定义,其实PEM是【Privacy-Enhanced Mail】的简写,但他也同样广泛运用于密钥管理
                  2、ASCII文件
                  3、一般基于base 64编码
 
格式         :  PKCS10 
扩展名      : .p10/.csr 
描述         : 【PKCS #10】公钥加密标准【Certificate Signing Request】
特点         :  1、证书签名请求文件
                  2、ASCII文件
                  3、CA签名后以p7r文件回复
 
格式         :  SPC 
扩展名      : .pvk/.spc 
描述         : 【Software Publishing Certificate】 
特点         :  微软公司特有的双证书文件格式,经常用于代码签名,其中
                  1、pvk用于保存私钥
                  2、spc用于保存公钥

你可能感兴趣的:(加密基础知识)