PKI

PKI

Public Key Infrastructure的缩写,即公开密钥基础设施,它是国际上解决开放式互联网络信息安全需要的一套体系。PKI体系支持身份认证,信息传输、存储的安全性,消息传输、存储的机密性,以及操作的不可否认性。“基础设施”的作用就是只要遵从必要的原则,不同的实体都可以方便的使用基础设施提供。

PKI的核心是认证中心(CA)。CA就像公安局发放身份证一样,发放一个叫“数字证书”的身份证明,这个数字证书包含了用户身份的部分信息,以及用户持有的公钥。

PKI的核心技术基础是公钥密码学的“加密”和“签名”技术

数字证书(公钥)

数字证书就是网络通信中标识通信各方神风信息的一系列数据,其作用类似于显示生活中的身份证。

最简单的证书包含一个公开密钥、名称以及证书授权中心的数字签名。一般情况下证书汇总还包括密钥的有效时间、发证机关的名称、改证书的序列号等信息,证书的格式遵循ITUT X.509国际标准。

1、原理

数字证书采用公钥体制,即利用一对互相匹配的密钥进行加密、解密。每个用户可以设定一把特定的仅为本人所知的私钥,用它进行解密和签名;同时设定一把公钥并由本人公开,为一组用户所共享,用于加密和验证签名。当发送一份保密文件时,发送方使用接收方的公钥对数据加密,而接收方则使用自己的私钥解密,这样信息就可以安全无误的到达目的地。通过数字的手段保证加密过程是一个不可逆的,即只有用私钥才能解密。(公钥加密私钥解密)

RSA加密算法。其数学原理是将一个大数分解成两个质数的乘积,加密和解密用的是两个不同的密钥。即使已知明文、密文和加密密钥(公钥),想推导出解密密钥(私钥),在计算上是不可能的。

加密技术

加密技术的密码体制分为对称加密体制和非对称加密体制

1.对称加密,加密密钥和解密秘钥相同,代表算法DES

缺点:

1).需要提供一条安全的通道使通信双方在首次通信时协商一个共同的秘钥,直接面对面协商难以实施。只能通过邮件电话等不够安全的手段协商。

2).每个合作者需要使用不同的密钥,密钥数量庞大难于管理。

3).信息完整性不能鉴别,无法验证发送者和接受者的身份。

4).以共同保守秘密来实现,

2.非对称加密,加密秘钥和解密秘钥不同,加密秘钥可以公开而解密秘钥需要保密,代表算法RSA

公钥和私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能界面,如果用私钥进行加密,只有用对应的公钥才能解密。

缺点:

1).加密和解密花费时间长,速度慢,不适于对文件加密,只适用于对少量数据进行加密。

实际步骤(使用了两种加密方式):

1).发送方生成会话密钥(对称加密)并用接收方的公钥对会话密钥进行加密,然后将密钥发给接收方

2).发送方对需要传输的文件用会话密钥进行加密,将文件发送给接收方

3).接收方用私钥进行解密得到会话密钥

4).用会话密钥对文件解密,得到文件明文。

数字签名技术

数字签名:防止他人对传输的文件进行破坏以及确定发信人的身份采用的手段

完善的数字签名应具备签字方不能抵赖、他人不能伪造、在公证人面前能够验证真伪的能力。

目前数字签名采用较多的是公钥加密技术,如基于RSA的PKCS、X.509、PGP等

原理:

报文发送方从报文文本中生成一个128位的散列值(报文摘要或哈希值)。发送方用自己的私钥对这个散列值进行加密来星城发送发的数字签名。然后这个数字签名将作为报文的附件和报文一起发送给报文的接收方。接收方首先从接收到的原始报文中计算出128位散列值(或报文摘要),接着再用发送方的公钥来对报文附加的数字签名进行解密。如果两个散列值相同,那么接收方就能确认该数字签名是发送方的。

时间戳技术

数字时间戳技术(DTS)是数字签名技术的一种变种应用

Java Security

Java平台自诞生时就非常注重安全,如自动的内存管理、字节代码的验证机制以及独特的安全类加载方式。同时java的密码体系也设计得很完善,java security提供相关类和接口,java security api是java编程语言的核心API,位于java.security包中。开发人员可以利用该API实现安全工鞥,java密码体系依赖于JCA(Java Cryptography Architecture,java加密结构)和JCE(java cryptography extension,Java加密扩展)。

JCA包括了数字签名和消息摘要的API。

JCE扩展了JCA,提供了更丰富的安全API,包括对称分组算法,对称的流加密算法,非对称假面算法和信息认证码等。

体系结构:

1.密码服务提供者:java加密体系结构引入了密码服务提供者的概念,他是指一个包,用于提供JDK安全API的密码子集的具体实现。SUN jdk提供了一个叫“SUN”的缺省标准提供者。其他jdk可能不提供

2.密钥管理,java提供了名为“密钥仓库”的数据库来管理密钥和证书。应用程序可使用密钥仓库来完成认证或签名。

主要概念:

Java.security开发中引入了一些概念,主要包括引擎类的算法、实现和提供者、获取实现实例的factory方法等。

引擎类和算法:

“引擎类”:以一种抽象方式定义一种密码服务,一个引擎类提供某类密码服务功能的接口。Signature和KeyFactory就是两个引擎类。Signature提供对数字签名算法功能的访问。KeyFactory提供DSA私钥或公钥

JAVA摘要算法

MessageDigest(MD),摘要算法有MD5、MD2、SHA1

JAVA加密和解密

数据的加密就是通过一定的数学变换把原始有意义的数据转化为无意义的数据。

对称加密算法的加密和解密采用同一个密钥,大多数采用替换、置换、和移位等技术对原始数据进行变换。

Java中对称密钥的产生以及对称加密和解密等功能是在JCE中提供的,密钥产生是由javax.crypto.KeyGenerator类提供的,对称加解密是由javax.crypto.Cipher类提供。

加密解密流程:

1).生成密钥,设置算法和密钥长度。

2).创建Cipher对象,确定算法、算法模式和填充模式。

3)初始化Cipher对象,设置加密以及加密密钥

4)用明文字符串计算密文,连续调用.update,最后调用doFinal

5)如果解密密文。则初始化为解密

6)解密密文。连续调用.update,最后调用doFinal。

JAVA数字签名和验证

Java中非堆成密钥的产生、签名和验证等功能是在JCE中提供的。非堆成密钥产生是由javax.crypto.KeyPairGenerator类提供的,签名和验证是有javax.crypto.Signature类提供的。

你可能感兴趣的:(PKI)