rhino407
发贴: 0
积分: 0
|
于 2003-10-24 15:04
JAVA安全(我在学习中的总结,一些术语的解析便于理解。) 1、对称密钥: 加密和解密使用相同的密钥,称为对称密钥算法;另一类则在加密时使用一种密钥,在解密时使用另一种密钥,称为非对称密钥算法。
2、基于口令的加密和解密: 使用对称密钥加密时密钥都很长,很难记住。
3、非对称密钥:公钥和私钥: 将加密的密钥和解密的密钥分开。
4、使用密钥协定创建共享密钥: 非对称密钥解决了密钥分发的难题,但其计算量比对称密钥大。因此一般不使用非对称加密方法加密大量数据。常见的做法是:主要数据通过对称密钥加密,而使用非对称加密来分发对称密钥,这样就将两者的优势结合了起来。例如若A和B之间想秘密传送大量数据,一方(如A)先创建公钥和私钥对,公钥对外公布,另一方(如B)创建对称密钥,然后使用公钥加密对称密钥,传递给A,A收到后用私钥解密,得到对称密钥,以后A和B之间就可以使用对称密钥加密通信了。 除了这种方式外,还可以使用密钥协定来交换对称密钥。执行密钥协定的标准算法是DH算法(Diffie-Hellman算法)。DH算法是建立在DH公钥和私钥的基础上的,A需要和B共享密钥时。A和B各自生成DH公钥和私钥,公钥对外公布而私钥各自秘密保存。DH算法中,A可以用自己的密钥和B的公钥按照一定方法生成一个密钥,B也可以用自己的密钥和A的公钥按照一定方法生成一个密钥,由于一些数学规律,这两个密钥完全相同。这样,A和B间就有了一个共同的密钥可以用于各种加密。
5、使用消息摘要验证数据未被篡改 消息摘要是对原始数据按照一定算法进行计算得到的结果,它主要用于检验原始数据是否被修改过。消息摘要和加密不同,从加密的结果可以得到原始数据。而从消息摘要中不可能得到原始数据。消息摘要长度比原始数据短的多(所以称为原始数据的“摘要”)。实际使用中,原始数据不管多长,消息摘要一般是固定的16或20个字节长。可以用于验证信息是否在传输过程中被篡改过。因此消息摘要可以看作原始数据的指纹,指纹不同则原始数据不同。
6、使用消息验证码 当A将数据传递给B时,可以同时将对应的消息摘要传递给B。B收到后可以用消息摘要验证数据在传输过程中是否被篡改过。但这样做的前提是A传递给B的消息摘要正确无误。如果攻击者在修改原始数据的同时重新计算一下消息摘要,然后将A传递给B的消息摘要替换掉,则B通过消息摘要就无法验证出原始数据是否被修改过了。 消息验证码可以解决这一问题。使用消息验证码的前提是A和B双方有一个共同的密钥,这样A可以将消息摘要加密发给B,防止消息摘要被篡改。由于使用了共同的密钥,接收者可以在一定程度上验证发送者的身份:一定是和自己拥有共同的密钥的人,所以称为“验证码”。
7、数字签名: 使用消息摘要和消息验证码保证了数据未经过篡改,但接收者尚无法确定数据是否确实是某个人发来的。尽管消息验证码可以确定数据是某个拥有同样密钥的人发来的,但这要求双方具有共享的密钥,当数据要提供给一组用户、这一组用户都需要确定数据的来源时,消息验证码就不方便了。 数据签名可以解决这一问题。数据签名的基础是基于公钥和私钥的非对称加密,发送者使用私钥加密消息摘要(签名),接收者使用公钥解密消息摘要以验证签名是否是某个人的。这里之所以不直接对原始数据加密而是对消息摘要加密,是因为非对称算法一般计算速度较慢,这样加密很长的原始数据较耗时;而消息摘要即简短,又足以代表原始数据。同时无论原始数据多长,消息摘要的长度都固定。 意义:使用数字签名来确定数据的身份,保证了身份的确定性、不可篡改性和不可否认性。
8、数字化身份的确定——数字证书 使用数字签名的前提是接收数据者能够确信验证签名时使用的公钥确实是某个人的,数字证书可以解决这一问题。数字证书的主要功能是保存公钥和某个人或机构的对应关系。
9、SSL: SSL编程使用客户机/服务器模式,二者之间的通信使用SSL协议进行加密。SSL服务器程序运行时需要指定密钥库,以便向客户程序证明自己的身份。
10、HTTPS:
11、JAAS:
注释:混淆,大家可能都知道没有经过混淆的Java的Class反编译回来,方法和变量的名字都不会变,这是什么原因呢?这就要追述到Class文件的结构了,简单来说,Class文件种包含有一个常数池(constant pool)这个里面就存放了变量和方法的名称等一些和Class相关的东西,我们通常所说的混淆就是用一种工具把这个常数池里面的东西弄的胡涂一点,这样就能骗过反编译器和你。这就是为什么有时候反编译回来的东西编译不过去的原因。 原则: 原则一,尽量使用公钥和秘钥对进行加密; 原则二,不要在加密验证的部分使用面向对象思想。把验证的方法写在程序的各个角落,并 标注为private final void,让编译器替你处理成内联方法; 原则三,尽可能的大幅度混淆。
|