密钥分配
- 格式:doc
- 大小:634.50 KB
- 文档页数:7
对称密钥管理体系
对称密钥管理体系是指在加密通信过程中,通过对称密钥算法对传输的数据进行加密和解密的一种管理体系。
该体系主要由密钥生成、密钥分配、密钥更新、密钥存储和密钥销毁等环节组成。
密钥生成是对称密钥管理体系中的关键环节,它需要使用安全随机数生成器生成足够的强随机数,然后将这些随机数进行加工处理,生成密钥。
密钥分配环节是将生成的密钥分配给参与通信的各方,通常采用预共享密钥或者交换公钥等方式完成。
密钥更新是为了保证密钥的安全性,定期更换现有密钥,防止密钥暴露被攻击者利用。
密钥存储需要使用安全的存储设备来妥善保管密钥,以防止密钥泄露。
密钥销毁环节是在密钥不再使用时,将其彻底销毁,以免被攻击者利用。
对称密钥管理体系在保证通信安全的同时,也需要考虑效率和可靠性。
因此,在密钥管理体系的设计和实现中,需要充分考虑各种可能的攻击方式和风险,以及合理地选择和使用加密算法和密钥长度。
同时,还需要建立完善的密钥管理流程和规范,对密钥的生成、分配、更新、存储和销毁等环节进行管理和监控,以确保密钥的安全可靠。
- 1 -。
简述分布式密钥分配的过程分布式密钥分配的过程概述分布式密钥分配是指在多个节点之间协商出一个共同的密钥,以保证在网络通信中的安全性。
该过程需要确保密钥只有合法的节点能够获取到,并且在传输过程中不会被窃取或篡改。
下面将详细介绍分布式密钥分配的过程。
第一步:密钥协商算法选择在进行密钥协商之前,需要先选择一种适合当前场景的密钥协商算法。
目前常用的算法有Diffie-Hellman、RSA、ECC等。
Diffie-Hellman算法是一种基于离散对数问题的公开密钥加密算法,它可以让两个节点在不共享任何信息的情况下协商出一个共同的秘密。
RSA算法则是一种基于大素数分解问题的公开密钥加密算法,它通过使用两个大质数来生成公私钥对,并利用这些数字进行加解密操作。
ECC算法则是一种基于椭圆曲线离散对数问题的公开密钥加密算法,它具有短秘钥长度和高安全性等优点。
第二步:生成公私钥对在确定好使用哪种协商算法后,需要为每个节点生成一对公私钥。
其中,私钥只有节点本身知道,而公钥可以被其他节点获取。
以RSA算法为例,生成公私钥对的过程如下:1.选择两个大质数p、q,并计算它们的乘积n=p*q。
2.计算欧拉函数φ(n)=(p-1)*(q-1)。
3.选择一个整数e(1<e<φ(n)),使得e和φ(n)互质。
4.计算d,满足d*e mod φ(n)=1。
5.将n和e组成公钥,将n和d组成私钥。
第三步:密钥协商在生成好公私钥对后,各个节点可以开始进行密钥协商。
具体流程如下:1.每个节点随机生成一个密钥K,并将其加密后发送给其他节点。
2.接收到其他节点发送的密文后,每个节点使用自己的私钥进行解密,并得到对应的明文K。
3.每个节点将所有明文K进行汇总,并计算出它们的哈希值H(K)。
如果所有节点得到的哈希值相同,则说明协商成功;否则需要重新进行协商过程。
第四步:密钥更新在完成一轮密钥协商之后,为了保证通信安全性,需要定期更新密钥。
密钥分配方案简介密钥分配是在计算机网络和信息安全中的一个重要问题。
在安全通信中,密钥用于加密和解密信息,确保通信的机密性和完整性。
因此,密钥的分配必须是安全和高效的,以防止未经授权的人获取密钥并窃取敏感信息。
在本文档中,我们将介绍几种常见的密钥分配方案,包括对称密钥和公钥密码体制。
对称密钥分配方案对称密钥是一种加密算法,其中同一个密钥被用于加密和解密过程。
因为对称密钥算法的加密和解密速度快,所以通常被用于大量数据的传输过程中。
然而,在对称密钥分配方案中,最大的问题是如何将密钥安全地传输给通信双方并保证其机密性。
以下是几种常见的对称密钥分配方案:1. 预先共享密钥在预先共享密钥方案中,通信双方事先共享一个密钥。
这个密钥可以通过安全的渠道传输或由双方共同生成。
然后,在通信过程中,双方使用这个密钥进行加密和解密操作。
预先共享密钥方案的优点是简单且高效,但其安全性取决于密钥的传输过程。
如果密钥被未经授权的人获取,将导致通信的机密性受到威胁。
2. 密钥分配中心在密钥分配中心方案中,存在一个可信任的密钥分配中心(KDC)。
KDC负责生成、分发和管理通信双方的密钥。
双方首先与KDC进行身份验证,并获得一个临时的会话密钥。
然后,使用会话密钥进行通信。
密钥分配中心方案具有较高的安全性,因为通信双方不需要直接传输密钥。
但是,如果KDC遭到攻击或成为单点故障,将会对通信的安全性产生威胁。
3. Diffie-Hellman密钥交换Diffie-Hellman密钥交换是一种基于离散对数问题的安全协议。
通信双方通过交换公开的参数和私密的局部密钥计算出一个共享密钥。
这个共享密钥用于对称密钥加密算法。
Diffie-Hellman密钥交换方案具有较高的安全性,因为即使传输的公开参数被截获,也无法计算出私密的局部密钥。
但是,它无法提供身份验证,所以需要结合其他方案来确保通信的完整性。
公钥密码体制公钥密码体制是一种使用两个密钥的加密算法:公钥和私钥。
密钥分配设计密钥分配系统时,采用了4层加密体制。
按规定交费的用户,由收费管理计算机,将其用户名义地址送中心控制计算机,查找出相应保密字,发出由该保密字加密的月密钥。
用户解扰器,利用机内的保密字,自动脱出月密钥,由月密钥脱出服务密钥,由服务密钥脱出解扰用的序列和控制信息,用户就能收视正常图像了。
没有交费的用户,就不能获得特定保密字加密的月密钥,自然就不能收视到正常图像。
系统按一干万户设计,对一百万户系统而言,寻址用户的周期约1小时,寻址是反复进行的,用户解扰器只要有一次被寻址访问,当月的月密钥就存在解扰器中了,下次开机立即收视,不需再等寻址。
月密钥每月一换,为了防止新月到来时,重新寻址,误了用户收看。
采用每月十五日后预发下月月密钥的方法,只要下个月已按规定交费,并且在本月十五日后收视加扰电视的用户,下月月密钥就将存在解扰器中,下月开始,开机即可收视。
对百万用户系统,新用户最多只需要等待60分钟就可收视到正常图像。
与寻址收视相仿,有一种寻址关闭系统,中心控制计算机只寻址未交费用户的解扰器。
在未寻址访问前,该用户可以正常收看加扰电视,一旦被寻址,立即关闭解扰功能。
这种系统的安全性低,因为只要阻止寻址数据,便可长期收看。
所以在设计中没有采用。
3.4数据保护为了使数据的误码率降到允许的范围内,采用了一系列保护数据的措施,其中有:(1)前向校验·奇偶性校验·汉明编码校验. CRC校验(2)重要数据重复发出(3)多数判决(4)数据截获及同步的特殊设计前两点在加扰中心完成的,后两点是在用户解扰器中考虑的。
在有线电视网路中实地试验时,在信杂比约为15dB情况下,仍能正常解扰,数据保护的设计功效得到了证实。
.35系统构成本模拟加扰系统,由加扰中心、收费系统、用户解扰器三部分组成。
()l加扰中心加扰中心属电视台播控部门,它包括用户管理计算机、加扰控制计算机、加扰处理器。
中心的主要任务是将视频图像信号加扰打乱,形成寻址数据,控制加扰方式和效果。
实习一密钥分配一、实习目的1.理解密钥管理的重要性;2.掌握对称密码和公钥密码密钥管理的不同特性;3.掌握密钥分发基本方法,能设计密钥分发方案二、实习要求1.实习前认真预习第2章的有关内容;2.复习对称密码和公钥密码相关内容;3.熟悉Java平台的JCE包有关类。
三、实习内容假定两个用户A、B,用户A、B的通讯密钥为K,他们的公私钥对分别是K PUa、K PRa 和K PUb、K PRb,他们要进行安全通讯,密钥分发与通信过程如1所示。
图1 基于混合加密的安全通信模型Fig.1 Model of secure communication based on mixed cryptography(1)根据图1所示,实现利用公钥密码算法分发对称密钥的过程。
实现的阶梯任务如下:①以本地两个目录模拟两个用户,采用变量方式直接实现密钥的分发;②实现算法的图形化方式,用户可以选择算法、参数、工作模式等;③以文件方式管理密钥及明文、密文;④采用SSL,建立安全通信过程;⑤将方案移植到某个web应用中。
(2)按照(1)的阶梯任务,实现基于DH密钥协定的密钥分发。
三、数据测试及预期结果1、利用DES算法生成对称密钥Key,运行程序后生成Key.dat文件2、利用RSA算法生成公钥密钥对,将公钥存入A文件夹下,将私钥存入B文件夹下,运行程序后在A文件夹下生成Skey_RSA_pub.dat文件,在B文件夹下生成Skey_RSA_priv.dat 文件:3、利用RSA加密算法对对称密钥加密,将加密后文件保存为Enc_RSA.dat文件,运行程序后:4、利用RSA解密算法对密文进行解密,将解密后的文件Key.dat写入B文件夹下,运行程序后B文件夹下生成Key.dat文件:四、算法分析及流程图五、实验总结通过本次实习,复习了DES和RSA的相关知识,通过使用DES算法和RSA算法实现密钥分发与通信过程,对密钥的分配过程有了一定的了解。
还复习了java中有关加密解密的类库,感叹Java真的是很强大呀。
还有就是也能提高我们自己的安全意识,之所以要学习安全类的课程,就是因为网络是不安全的。
学习了之后也能的以后的开发中避免类似的问题。
附录:源程序//生成对称密钥package Skey;import java.io.FileOutputStream;import java.io.ObjectOutputStream;import javax.crypto.KeyGenerator;import javax.crypto.SecretKey;public class Skey_DES {/*** @param args*/// TODO Auto-generated method stub//对称密钥的生成,并通过对象序列化方式保存在文件中public static void main(String args[]) throws Exception{KeyGenerator kg=KeyGenerator.getInstance("DESede");//创建密钥生成器kg.init(168);//初始化密钥生成器SecretKey k=kg.generateKey( );//生成密钥//通过对象序列化方式将密钥保存在文件中FileOutputStream f1=new FileOutputStream("A/Key.dat");ObjectOutputStream b1=new ObjectOutputStream(f1);b1.writeObject(k);}}//生成对称密钥对package RSA;import java.io.*;import java.security.*;public class Skey_RSA {/*** @param args*/public static void main(String[] args) throws Exception{ //密钥对生成器KeyPairGenerator工厂,非对称加密算法:RSA,DSAKeyPairGenerator kpg=KeyPairGenerator.getInstance("RSA");//制定密钥长度kpg.initialize(1024);//生成密钥对KeyPair kp=kpg.genKeyPair();PublicKey pbkey=kp.getPublic();PrivateKey prkey=kp.getPrivate();FileOutputStreamf1=new FileOutputStream("A/Skey_RSA_pub.dat");ObjectOutputStream b1=new ObjectOutputStream(f1);b1.writeObject(pbkey);FileOutputStreamf2=new FileOutputStream("B/Skey_RSA_priv.dat");ObjectOutputStream b2=new ObjectOutputStream(f2);b2.writeObject(prkey);}}//公钥加密package RSA;import java.security.interfaces.RSAPublicKey;import java.math.*;import java.io.*;public class Enc_RSA {public static void main(String[] args) throws Exception{ BufferedReader in=new BufferedReader(new InputStreamReader(new FileInputStream("A/Key.dat")));String s=in.readLine();FileInputStream f=new FileInputStream("A/Skey_RSA_pub.dat");ObjectInputStream b=new ObjectInputStream(f);//公钥转换为RSA公钥RSAPublicKey pbk=(RSAPublicKey)b.readObject();//获取公钥参数:公钥对应的整数e,用于取模的整数nBigInteger e=pbk.getPublicExponent();BigInteger n=pbk.getModulus();System.out.println("e="+e);System.out.println("n="+n);byte ptext[]=s.getBytes("UTF8");BigInteger m=new BigInteger(ptext);BigInteger c=m.modPow(e,n);System.out.println("c="+c);String cs=c.toString();BufferedWriter out=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("Enc_RSA.dat")));out.write(cs,0,cs.length());out.close();}}//私钥解密package RSA;import java.security.interfaces.*;import java.math.*;import java.io.*;public class Dec_RSA {public static void main(String[] args) throws Exception{BufferedReader in=new BufferedReader (new InputStreamReader(new FileInputStream("Enc_RSA.dat")));String ctext=in.readLine();BigInteger c=new BigInteger(ctext);FileInputStream f=new FileInputStream("B/Skey_RSA_priv.dat");ObjectInputStream b=new ObjectInputStream(f);RSAPrivateKey prk=(RSAPrivateKey)b.readObject();BigInteger d=prk.getPrivateExponent();BigInteger n=prk.getModulus();System.out.println("d="+d);System.out.println("n="+n);BigInteger m=c.modPow(d, n);System.out.println("m="+m);byte[]mt=m.toByteArray();System.out.println("Plain Text is");for(int i=0;i<mt.length;i++){System.out.print((char)mt[i]);FileOutputStream f1=new FileOutputStream("B/Key.dat");ObjectOutputStream b1=new ObjectOutputStream(f1);b1.writeObject(m);}}}。