一 密钥分配

一 密钥分配
一 密钥分配

实习一密钥分配

一、实习目的

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所示,实现利用公钥密码算法分发对称密钥的过程。

实现的阶梯任务如下:

①以本地两个目录模拟两个用户,采用变量方式直接实现密钥的分发;

②实现算法的图形化方式,用户可以选择算法、参数、工作模式等;

③以文件方式管理密钥及明文、密文;

④采用Socket,建立安全通信过程;

⑤将方案移植到某个web应用中。

(2)按照(1)的阶梯任务,实现基于DH密钥协定的密钥分发。

四、实验过程

1.知识回顾

DES 是数据加密标准(Data Encryption Standard)的简称,出自IBM 的研究工作,并在1977 年被美国政府正式采纳。它是使用较为广泛的密钥系统,最初开发DES 是嵌入硬件中DES 特别是在保护金融数据的安全,如自动取款机中,使用较多。

在DES 中,使用了一个56 位的密钥以及附加的8 位奇偶校验位,产生最大64 位的分组大小。加密过程中,将加密的文本块分成两半。使用子密钥对其中一半应用循环功能,然后将输出与另一半进行“异或”运算;接着交换这两半。循环往复。DES 使用16 个循环,但最后一个循环不交换。

攻击DES,一般只能使用穷举的密钥搜索,即重复尝试各种密钥直到有一个符合为止。如果DES使用56 位的密钥,则可能的密钥数量是2 56 个,穷举难度较大。IBM曾对DES拥有几年的专利权,但在1983 年到期。

在公开密钥密码体制中,加密密钥(即公开密钥)PK是公开信息,而解密密钥(即秘密密钥)SK是需要保密的。加密算法E和解密算法D也都是公开的。虽然解密密钥SK是由公开密钥PK决定的,但却不能根据PK计算出SK。

正是基于这种理论,1978年出现了著名的RSA算法,它通常是先生成一对RSA 密钥,其中之一是保密密钥,由用户保存;另一个为公开密钥,可对外公开,甚至可在网络服务器中注册。为提高保密强度,RSA密钥至少为500位长,一般推荐使用1024位。这就使加密的计算量很大。为减少计算量,在传送信息时,常采用传统加密方法与公开密钥加密方法相结合的方式,即信息采用改进的DES或IDEA对话密钥加密,然后使用RSA密钥加密对话密钥和信息摘要。对方收到信息后,用不同的密钥解密并可核对信息摘要。

2.问题分析

(1).对称密钥密码体系

对称密钥密码体系也叫密钥密码体系,它是指消息发送方和消息接收方必须使用相同的密钥,该密钥必须保密。发送方用该密钥对待发消息进行加密,然后将消息传输至接收方,接收方再用相同的密钥对收到的消息进行解密。这一过程可用数学形式来表示。消息发送方使用的加密函数encrypt有两个参数:密钥K 和待加密消息M,加密后的消息为E,E可以表示为E=encrypt(K,M)消息接收方使用的解密函数decrypt把这一过程逆过来,就产生了原来的消息

M=decrypt(K,E)=decrypt(K,encrypt(K,M))

(2).非对称密钥密码体系

非对称密钥密码体系又叫公钥密码体系,它使用两个密钥:一个公共密钥PK和一个私有密钥SK。这两个密钥在数学上是相关的,并且不能由公钥计算出对应的私钥,同样也不能由私钥计算出对应的公钥。这种用两把密钥加密和解密的方法表示成如下数学形式。假设M表示一条消息,pub—a表示用户a的公共密钥,prv—a表示用户a的私有密钥,那么:

M=decrypt(pub—a,encrypt(prv—a,M))

3.算法分析及流程图

4.实验原理

(1) 利用java中的KeypairGenerator类创建公钥密钥对,工厂类KeypairGenerator的静态方法getInstance()可以获得KeypairGenerator类型对象。

(2) 方法getInstance()的参数为字符串类型,指定加密算法为RSA。

(3) RSA算法是使用整数进行加密运算的,RSA的公钥中包含两个信息:公钥对应的整数e和用于取模的整数n。对于明文m计算密文的公式是m e mod n。java中的BigInteger类中定义的modPow()方法可以计算m e mod n。

(4) RSA的私钥中包含两个信息:私钥对应的整数d和用于取模的整数n。计算明文的公式是:C e mod n。

5.类图

四.数据测试及结果

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知识,理解了公钥密码算法,掌握了RSA密码算法加解密过程的实现,学习了java.security.*和java.crypto.* 中相关类。对于KeypairGenerator,KeyPair,PublicKey,PrivateKey等类有了进一步的了解,RSA算法是使用整数进行加密运算的,RSA的公钥中包含两个信息公钥对应的整数e和用于取模的整数n。由于时间精力有限,本次实验还存在很多问题,在控制台进行明文的加密解密正常,图形界面的加密也正常,解密时调用Skey_RSA的解密方法时未能完成解密工作。加密方法的参数密钥由KeypairGenerator的静态方法getInstance()可以获得KeypairGenerator类型对象,所以在界面使用文本框获得key值会造成初始化方法init()的publickey参数错误,于是设置成密钥由系统生成。

Cipher cipher = Cipher.getInstance("RSA");// Cipher负责完成加密或解密工作,基于RSA cipher.init(Cipher.ENCRYPT_MODE, publicKey); // 根据公钥,对Cipher对象进行初始化

对称密码一般要求:

1、加密解密用相同的密钥

2、收发双方必须共享密钥

安全性要求:

1、密钥必须保密

2、没有密钥,解密不可行

3、知道算法和若干密文不足以确定密钥

公钥密码一般要求:

1、加密解密算法相同,但使用不同的密钥

2、发送方拥有加密或解密密钥,而接收方拥有另一个密钥

安全性要求:

1、两个密钥之一必须保密

2、无解密密钥,解密不可行

3、知道算法和其中一个密钥以及若干密文不能确定另一个密钥

源程序

//生成对称密钥

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.*;

import java.security.interfaces.RSAPrivateKey;

import java.security.interfaces.RSAPublicKey;

import javax.crypto.Cipher;

public class Skey_RSA {

// KeyGenerator提供对称密钥生成器的功能,支持各种算法

public KeyPairGenerator keyPairGen;

// SecretKey负责保存对称密钥

KeyPair keyPair;

RSAPrivateKey privateKey;

RSAPublicKey publicKey;

// Cipher负责完成加密或解密工作

private Cipher c;

// 该字节数组负责保存加密的结果

private byte[] cipherByte;

// KeyPairGenerator 类用于生成公钥和私钥对,基于RSA算法生成对象

/**

* @param args

*/

Skey_RSA() {

// KeyPairGenerator 类用于生成公钥和私钥对,基于RSA算法生成对象

KeyPairGenerator keyPairGen = null;

try {

keyPairGen = KeyPairGenerator.getInstance("RSA");

} catch (NoSuchAlgorithmException e) {

// TODO 自动生成的catch 块

e.printStackTrace();

}

// 初始化密钥对生成器,密钥大小为1024位

keyPairGen.initialize(1024);

// 生成一个密钥对,保存在keyPair中

KeyPair keyPair = keyPairGen.generateKeyPair();

// 得到私钥

RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();

// 得到公钥

RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();

}

public RSAPrivateKey getPrivateKey() {

return privateKey;

}

public void setPrivateKey(RSAPrivateKey privateKey) {

this.privateKey = privateKey;

}

public RSAPublicKey getPublicKey() {

return publicKey;

}

public void setPublicKey(RSAPublicKey publicKey) {

this.publicKey = publicKey;

}

public byte[] encrypt(RSAPublicKey publicKey, byte[] srcBytes) { if (publicKey != null) {

try {

// Cipher负责完成加密或解密工作,基于RSA

Cipher cipher = Cipher.getInstance("RSA");

// 根据公钥,对Cipher对象进行初始化

cipher.init(Cipher.ENCRYPT_MODE, publicKey);

// 加密,结果保存进resultBytes

byte[] resultBytes = cipher.doFinal(srcBytes);

return resultBytes;

} catch (Exception e) {

e.printStackTrace();

}

}

return null;

}

public byte[] decrypt(RSAPrivateKey privateKey, byte[] encBytes) {

if (privateKey != null) {

try {

Cipher cipher = Cipher.getInstance("RSA");

// 根据私钥,对Cipher对象进行初始化

cipher.init(Cipher.DECRYPT_MODE, privateKey);

// 解密,结果保存进resultBytes

byte[] decBytes = cipher.doFinal(encBytes);

return decBytes;

} catch (Exception e)

{

e.printStackTrace();

}

}

return null;

}

public static void main(String[] args) throws Exception {

// 密钥对生成器KeyPairGenerator工厂,非对称加密算法:RSA,DSA

KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");

// 制定密钥长度

kpg.initialize(1024);

// 生成密钥对

KeyPair kp = kpg.genKeyPair();

PublicKey pbkey = kp.getPublic();

PrivateKey prkey = kp.getPrivate();

FileOutputStream f1 = new FileOutputStream("A/Skey_RSA_pub.dat");

ObjectOutputStream b1 = new ObjectOutputStream(f1);

b1.writeObject(pbkey);

FileOutputStream f2 = new FileOutputStream("B/Skey_RSA_priv.dat");

ObjectOutputStream b2 = new ObjectOutputStream(f2);

b2.writeObject(prkey);

Skey_RSA rsa = new Skey_RSA();

String msg = "rsa_安全编程技术";

System.out.println("明文是:" + msg);

// KeyPairGenerator 类用于生成公钥和私钥对,基于RSA算法生成对象

KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");

// 初始化密钥对生成器,密钥大小为1024位

keyPairGen.initialize(1024);

// 生成一个密钥对,保存在keyPair中

KeyPair keyPair = keyPairGen.generateKeyPair();

// 得到私钥

RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();

// 得到公钥

RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();

// 用公钥加密

byte[] srcBytes = msg.getBytes();

byte[] resultBytes = rsa.encrypt(publicKey, srcBytes);

String result = new String(resultBytes);

System.out.println("用公钥加密后密文是:" + result);

// 用私钥解密

byte[] decBytes = rsa.decrypt(privateKey, resultBytes);

String dec = new String(decBytes);

System.out.println("用私钥解密后结果是:" + dec);

}

}

//公钥加密

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,用于取模的整数n

BigInteger 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

System.out.print((char)mt[i]);

FileOutputStream f1=new FileOutputStream("B/Key.dat");

ObjectOutputStream b1=new ObjectOutputStream(f1);

b1.writeObject(m);

}

}

}

//图形界面

package Dec;

/*

* Window.java

*

* Created on __DATE__, __TIME__

*/

import java.io.IOException;

import java.security.interfaces.RSAPublicKey;

import java.util.Scanner;

/**

*

* @author __USER__

*/

public class Window extends javax.swing.JFrame {

/** Creates new form Window */

public Window() {

initComponents();

}

/** This method is called from within the constructor to

* initialize the form.

* WARNING: Do NOT modify this code. The content of this method is

* always regenerated by the Form Editor.

*/

//GEN-BEGIN:initComponents

//

private void initComponents() {

button1 = new java.awt.Button();

textField1 = new java.awt.TextField();

textField2 = new java.awt.TextField();

内容= new https://www.360docs.net/doc/ec2642535.html,bel();

密钥= new https://www.360docs.net/doc/ec2642535.html,bel();

textArea1 = new java.awt.TextArea();

button2 = new java.awt.Button();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

button1.setLabel("加密");

button1.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(java.awt.event.ActionEvent evt) {

// textField1.setText("");

// textField2.setText("");

// textField1.requestFocus();

try {

button1ActionPerformed(evt);

} catch (IOException e) {

// TODO 自动生成的catch 块

e.printStackTrace();

}

}

});

textField1.setText("请输入明文或者密文");

textField1.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(java.awt.event.ActionEvent evt) {

textField1ActionPerformed(evt);

}

});

textField2.setText("密钥由系统随机生成");

textField2.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(java.awt.event.ActionEvent evt) {

textField2ActionPerformed(evt);

}

});

内容.setText("内容");

密钥.setText("密钥");

button2.setLabel("解密");

button2.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(java.awt.event.ActionEvent evt) {

try {

button2ActionPerformed(evt);

} catch (IOException e) {

// TODO 自动生成的catch 块

e.printStackTrace();

}

}

});

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(

getContentPane());

getContentPane().setLayout(layout);

layout.setHorizontalGroup(layout

.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(

layout.createSequentialGroup()

.addGap(127, 127, 127)

.addGroup(

layout.createParallelGroup(

javax.swing.GroupLayout.Alignment.TRAILING)

.addGroup(

layout.createParallelGroup(

javax.swing.GroupLayout.Alignment.LEADING)

.addComponent( textArea1,

javax.swing.GroupLayout.Alignment.TRAILING,

javax.swing.GroupLayout.DEFAULT_SIZE,

124,

Short.MAX_VALUE)

.addGroup( layout.createSequentialGroup()

.addGroup(

layout.createParallelGroup(

javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(

javax.swing.GroupLayout.Alignment.TRAILING,

layout.createSequentialGroup()

.addPreferredGap(

https://www.360docs.net/doc/ec2642535.html,ponentPlacement.RELATED)

.addComponent(

内容,

javax.swing.GroupLayout.PREFERRED_SIZE,

38,

javax.swing.GroupLayout.PREFERRED_SIZE))

.addComponent(

密钥,

javax.swing.GroupLayout.PREFERRED_SIZE,

javax.swing.GroupLayout.DEFAULT_SIZE,

javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(2,

2,

2)

.addGroup(

layout.createParallelGroup(

javax.swing.GroupLayout.Alignment.LEADING)

.addComponent(

textField1,

javax.swing.GroupLayout.DEFAULT_SIZE,

84,

Short.MAX_VALUE)

.addComponent(

textField2,

javax.swing.GroupLayout.DEFAULT_SIZE,

84,

Short.MAX_VALUE))))

.addGroup(

layout.createSequentialGroup()

.addComponent(

button1,

javax.swing.GroupLayout.PREFERRED_SIZE,

javax.swing.GroupLayout.DEFAULT_SIZE,

javax.swing.GroupLayout.PREFERRED_SIZE)

.addPreferredGap(

https://www.360docs.net/doc/ec2642535.html,ponentPlacement.RELATED)

.addComponent(

button2, javax.swing.GroupLayout.PREFERRED_SIZE,

javax.swing.GroupLayout.DEFAULT_SIZE,

javax.swing.GroupLayout.PREFERRED_SIZE)))

.addGap(149, 149, 149)));

layout.setVerticalGroup(layout

.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(

layout.createSequentialGroup()

.addGap(29, 29, 29)

.addGroup(

layout.createParallelGroup(

javax.swing.GroupLayout.Alignment.TRAILING)

.addComponent(

textField1,

javax.swing.GroupLayout.PREFERRED_SIZE,

javax.swing.GroupLayout.DEFAULT_SIZE,

javax.swing.GroupLayout.PREFERRED_SIZE)

.addComponent(

内容,

javax.swing.GroupLayout.PREFERRED_SIZE,

javax.swing.GroupLayout.DEFAULT_SIZE,

javax.swing.GroupLayout.PREFERRED_SIZE))

.addPreferredGap(

https://www.360docs.net/doc/ec2642535.html,ponentPlacement.RELATED)

.addGroup(

layout.createParallelGroup(

javax.swing.GroupLayout.Alignment.LEADING)

.addComponent(

密钥, javax.swing.GroupLayout.PREFERRED_SIZE,

javax.swing.GroupLayout.DEFAULT_SIZE,

javax.swing.GroupLayout.PREFERRED_SIZE)

.addComponent(

textField2, javax.swing.GroupLayout.PREFERRED_SIZE,

javax.swing.GroupLayout.DEFAULT_SIZE,

javax.swing.GroupLayout.PREFERRED_SIZE))

.addPreferredGap(

https://www.360docs.net/doc/ec2642535.html,ponentPlacement.RELATED)

.addGroup(

layout.createParallelGroup(

javax.swing.GroupLayout.Alignment.TRAILING)

.addComponent(

button2, javax.swing.GroupLayout.PREFERRED_SIZE,

javax.swing.GroupLayout.DEFAULT_SIZE,

javax.swing.GroupLayout.PREFERRED_SIZE)

.addComponent(

button1,

javax.swing.GroupLayout.PREFERRED_SIZE,

javax.swing.GroupLayout.DEFAULT_SIZE,

javax.swing.GroupLayout.PREFERRED_SIZE))

.addPreferredGap(

https://www.360docs.net/doc/ec2642535.html,ponentPlacement.RELATED)

.addComponent(textArea1,

javax.swing.GroupLayout.PREFERRED_SIZE,

javax.swing.GroupLayout.DEFAULT_SIZE,

javax.swing.GroupLayout.PREFERRED_SIZE)

.addContainerGap(91, Short.MAX_VALUE)));

pack();

}//

//GEN-END:initComponents

private void button2ActionPerformed(java.awt.event.ActionEvent evt) throws IOException { // 解密得到两个输入框的输入值

textArea1.setText("");

// textArea1.append("欢迎使用64位RSA加密解密演示程序。"+" ");

String data= textField1.getText();

String key = textField2.getText();

RSA desUtil = new RSA();

textArea1.append("解密前密文:" + data+ " ");

// 加密后的byte型的密文

byte[] src=data.getBytes();

byte[] result1 = desUtil.DesEncrypt(src);

textArea1.append("解密后明文:" + new String(result1));

}

private void textField2ActionPerformed(java.awt.event.ActionEvent evt) {

textField2.setText("");

}

private void textField1ActionPerformed(java.awt.event.ActionEvent evt) {

// TODO add your handling code here:

textField1.setText("");

}

private void button1ActionPerformed(java.awt.event.ActionEvent evt) throws IOException { textArea1.setText("");

// textArea1.append("欢迎使用64位RSA加密解密演示程序。"+" ");

String data= textField1.getText();

RSA desUtil = new RSA();

textArea1.append("加密前明文:" + data+" ");

// 加密后的byte型的密文

byte[] result = desUtil.createEncryptor(data);

textArea1.append("加密后密文:" + new String(result));

}

/**

* @param args the command line arguments

*/

public static void main(String args[]) {

Des desUtil = new Des();

java.awt.EventQueue.invokeLater(new Runnable() {

public void run() {

new Window().setVisible(true);

}

});

}

//GEN-BEGIN:variables

// Variables declaration - do not modify

private java.awt.Button button1;

private java.awt.Button button2;

private java.awt.TextArea textArea1;

private java.awt.TextField textField1;

private java.awt.TextField textField2;

private https://www.360docs.net/doc/ec2642535.html,bel 内容;

private https://www.360docs.net/doc/ec2642535.html,bel 密钥;

// End of variables declaration//GEN-END:variables

}

密钥分配与管理1.0

第5章密钥分配与管理 1.密钥管理基本概念 现代密码学把数据加密保护的全部系于密钥之上,所以密钥的安全管理是保证密码系统安全性的关键因素。密钥管理是指处理密钥自产生到最终销毁的有关问题的全过程,大体上讲,密钥管理包括密钥的生成、存储、分配、启用与停用、控制、更新、撤销与销毁等诸多方面,其中密钥的分配与存储可能最棘手。密钥管理的目地是维持系统中各实体之间的密钥关系,以抗击各种可能的威胁。密钥管理要借助加密、认证、签名、协议、公正等技术。(1)密钥的种类 密钥种类很多,但主要有以下几种 ①基本密钥或初始密钥 基本密钥是由用户选或由系统分配给用户的可在较长时间(相对于会话密钥)内由一对用户所专用的秘密密钥,又称用户密钥。基本密钥和会话密钥一起启动和控制某种算法所构造的密钥产生器,以此,产生用于加密数据的密钥流。 ②会话密钥 会话密钥是两个通信终端用户在一次交换数据时所采用的密钥,当用其保护传输数据时称为数据加密密钥,当用其保护文件时称为文件密钥。会话密钥可由通信双方预先约定,也可由系统动态地产生并赋予通信双方,它为通信双方专用,故又称为专用密码。 ③密钥加密密钥 密钥加密密钥是对传送的会话或文件密钥进行加密时采用的密钥,也称次主密钥,通信网中每个节点都分配有一个这类密钥。 ④主机主密钥 主机主密钥是对密钥加密密钥进行加密的密钥,存于主机处理器中。 此外还有用户密钥、族密钥和算法更换密钥等。 (2)密钥生成 主机主密钥通常用要用诸如掷硬币、骰子,从随机数表中选数等随机方式产生。 密钥加密密钥可由安全算法、二级管噪声产生器、伪随机数产生器等生成,也可以由密钥操作员选定。 会话密钥可在密钥加密密钥作用下通过某种加密算法动态生成,如用密钥加密密钥控制DES算法生成。 基本密钥可用生成密钥加密密钥或主机主密钥的方法生成。 (3)密钥存储

信息安全概论大作业-密钥管理技术

密钥管理技术 一、摘要 密钥管理是处理密钥自产生到最终销毁的整个过程的的所有问题,包括系统的初始化,密钥的产生、存储、备份/装入、分配、保护、更新、控制、丢失、吊销和销毁等。其中分配和存储是最大的难题。密钥管理不仅影响系统的安全性,而且涉及到系统的可靠性、有效性和经济性。当然密钥管理也涉及到物理上、人事上、规程上和制度上的一些问题。 密钥管理包括: 1、产生与所要求安全级别相称的合适密钥; 2、根据访问控制的要求,对于每个密钥决定哪个实体应该接受密钥的拷贝; 3、用可靠办法使这些密钥对开放系统中的实体是可用的,即安全地将这些密钥分配给用户; 4、某些密钥管理功能将在网络应用实现环境之外执行,包括用可靠手段对密钥进行物理的分配。 二、正文 (一)密钥种类 1、在一个密码系统中,按照加密的内容不同,密钥可以分为一般数据加密密钥(会话密钥)和密钥加密密钥。密钥加密密钥还可分为次主密钥和主密钥。 (1)、会话密钥, 两个通信终端用户在一次会话或交换数据时所用的密钥。一般由系统通过密钥交换协议动态产生。它使用的时间很短,从而限制了密码分析者攻击时所能得到的同一密钥加密的密文量。丢失时对系统保密性影响不大。 (2)、密钥加密密钥(Key Encrypting Key,KEK), 用于传送会话密钥时采用的密钥。 (3)、主密钥(Mater Key)主密钥是对密钥加密密钥进行加密的密钥,存于主机的处理器中。 2、密钥种类区别 (1)、会话密钥 会话密钥(Session Key),指两个通信终端用户一次通话或交换数据时使用的密钥。它位于密码系统中整个密钥层次的最低层,仅对临时的通话或交换数据使用。 会话密钥若用来对传输的数据进行保护则称为数据加密密钥,若用作保护文件则称为文件密钥,若供通信双方专用就称为专用密钥。 会话密钥大多是临时的、动态的,只有在需要时才通过协议取得,用完后就丢掉了,从而可降低密钥的分配存储量。 基于运算速度的考虑,会话密钥普遍是用对称密码算法来进行的 (2)、密钥加密密钥 密钥加密密钥(Key Encryption Key)用于对会话密钥或下层密钥进行保护,也称次主密钥(Submaster Key)、二级密钥(Secondary Key)。 在通信网络中,每一个节点都分配有一个这类密钥,每个节点到其他各节点的密钥加密密钥是不同的。但是,任两个节点间的密钥加密密钥却是相同的,共享的,这是整个系统预先分配和内置的。在这种系统中,密钥加密密钥就是系统预先给任两个节点间设置的共享密钥,该应用建立在对称密码体制的基础之上。 在建有公钥密码体制的系统中,所有用户都拥有公、私钥对。如果用户间要进行数据传输,协商一个会话密钥是必要的,会话密钥的传递可以用接收方的公钥加密来进行,接收方用自己的私钥解密,从而安全获得会话密钥,再利用它进行数据加密并发送给接收方。在这种系统中,密钥加密密钥就是建有公钥密码基础的用户的公钥。

密钥分配

实习一密钥分配 一、实习目的 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文件: 四、算法分析及流程图

系统密钥管理制度

系统密钥管理制度 汇通(总)字[2011]第025号 第一条前言 1.本制度是对汇通(总)字[2011]第013号的修改,原第013号文作废,系 统密钥管理制度以本次发文为标准 第二条目的 1.为了规范系统密钥管理,特制定本制度。 第三条适用范围 1.本制度适用于公司总部及境内所有分(子)公司。 第四条加密机管理 1.逻辑POSP加密机使用双机同时运行,互为热备运行机制,出现故障时 实时自动切换;统一POSP加密机使用双机冷备份运行机制,出现故障时立即进行替换。 2.加密机由运营维护部人员负责日常的管理,其他人员未经允许不得对加 密机进行设置、修改等。密钥由运营维护部专人输入并保管,其他部门

的人员不得进行密钥的输入工作。 3.对加密机进行任何的操作应遵照《中国银联密钥管理规范》等有关规定, 经本公司密钥安全管理小组审批同意后方能予以实施。 4.当加密机需要外出维修或软硬件升级时,要将原有密钥及时销毁。 5.加密机密钥销毁由设备管理员提交《密钥销毁申请表》给到信息技术中 心运维部经理进行确认,最终由信息技术中心总监审批之后,设备管理员对加密机进行密钥销毁操作。 第五条系统密钥管理 1.加密机主密钥由三个成份构成,应由三名主管公司汇通卡业务主管部门 负责人各自手工生成一个成份,同时输入加密机。 2.用于汇通卡业务(非联名卡)的区域主密钥和传输主密钥由两个成份构 成,应由两名主管公司汇通卡业务主管部门负责人各自手工生成一个成份,同时输入加密机。 3.密钥持有人应在预先打印的密钥表上填写各自掌握的密钥成份,各自打 印并以绝密文件形式安全保管所拥有的密钥成份,不得丢失或泄露。4.打印的密钥成份输入加密机完毕后,应装入信封密封,由密钥保管人和 见证人分别在封口签字。 5.区域主密钥、传输主密钥由16进制数组成,由‘0’-‘9’的数字或 ‘A’-‘F’的字母构成,每个成份的密钥长度为32个字符,加密机主密钥每个成份为48个字符。

密钥管理

1. 密钥管理系统技术方案 1.1. 密钥管理系统的设计前提 密钥管理是密码技术的重要环节。在现代密码学中,在密码编码学和密码分析学之外,又独立出一支密钥管理学。密钥管理包括密钥的生成、分配、注入、保管、销毁等环节,而其中最重要的就是密钥的分配。IC卡的密钥管理机制直接关系到整个系统的安全性、灵活性、通用性。密钥的生成、发行、更新是系统的一个核心问题,占有非常重要的地位。 为保证全省医疗保险系统的安全使用、保证信息不被侵犯,应在系统实施前建立起一套完整的密钥管理系统。 密钥管理系统的设计目标是在安全、灵活的前提下,可以安全地产生各级主密钥和各类子密钥,并将子密钥安全地下发给子系统的发卡中心,用来产生SAM卡、用户卡和操作员卡的各种密钥,确保以上所有环节中密钥的安全性和一致性,实现集中式的密钥管理。在全省内保证各个城市能够发行自己的用户卡和密钥卡,并由省级管理中心进行监控。 1.2. 密钥管理系统的设计方法 1.2.1. 系统安全的设计 本系统是一个面向省级医疗保险行业、在各个城市进行应用的系统,系统最终所发行的卡片包括SAM卡和用户卡。SAM卡将放在多种脱机使用的设备上;用户卡是由用户自己保存与使用并存储用户的基本信息和电子资金信 息。系统设计的关键是保障系统既具有可用性、开放性,又具有足够的安全性。 本系统密钥的存储、传输都是使用智能卡来实现的,因为智能卡具有高度的安全性。用户卡(提供给最终用户使用的卡片)上的密钥根本无法读出,只是在达到一定的安全状态时才可以使用。SAM卡(用来识别用户卡的认证密

钥卡)中的密钥可以用来分散出用户卡中部分脱机使用的密钥,但也无法读出。各级发行密钥母卡上的密钥在达到足够的安全状态时可以导出,但导出的密钥为密文,只有送到同类的卡片内才可以解密。本系统的安全机制主要有卡片的物理安全、智能卡操作系统的安全、安全的算法、安全的密钥生成与存储、密钥的安全传输与分散、保障安全的管理措施与审计制度。 1.2.2. 密钥的分层管理 密钥主要分层进行管理,即省级密钥管理中心只负责生成种子密钥,各个城市根据密钥种子负责生成自己的密钥系统和用户卡,这样既可以在全省范围内统一规划,又可以灵活使用。 1.2.3. 安全的密钥管理体制 密钥受到严格的权限控制,特别是对密钥的使用权限进行分级管理和控制; 密钥的生成、注入、导出等功能由发卡中心(省医疗保险基金管理中心)进行统一的控制和管理。 1.3. 系统功能 密钥管理系统的目标就是安全地产生各级主密钥和各类子密钥,并将子密钥安全地下发给子系统的发卡中心,用来产生SAM卡、用户卡和操作员卡中的各种密钥,确保以上所有环节中密钥的安全性和一致性,实现集中式的密钥管理。系统通过IC卡硬件、IC卡操作系统、合理的密钥管理系统设计、严格的安全管理规定来实现以上目标。 密钥管理系统是IC卡应用系统中最重要的环节,主要功能有密钥的产生、分配、使用、更新和销毁。 密钥的生成 产生省级各类主密钥和市级各类子密钥;产生用户卡和操作员卡的各种密 钥。密钥生成主要由三种形式结合使用: 使用安全可靠、快速的软件生成

密钥管理规定

密钥管理规定 目录 1.目的和适用范围 (1) 1.1. 1.2.目的 (1) 适用范围 (1) 2. 3.角色和职责 (1) 管理要求 (1) 3.1. 3.2. 3.3. 3.4. 3.5.安全数据的产生 (1) 密钥的形成与分发 (2) 根密钥明文数据的保存 (4) 其他密钥数据的保存 (4) 人员管理 (4) 4.相关记录 (5)

密钥管理规定 1.目的和适用范围 1.1.目的 规范公司产品开发及生产过程中密钥使用的保密要求,以防止因不当操作发生信息泄露。 1.2.适用范围 本规定适用于公司产品设计开发及生产过程中密钥使用的管理。 2.角色和职责 3.管理要求 3.1.安全数据的产生 开始进行个人化之前,必须创建相应的加密密钥,必须按本部分的规定进行。至少应生成以下的密钥: a) 发卡行主密钥(KMC):用来派生K MAC、K ENC和K DEK三个密钥。 ●K MAC——用来锁闭中国金融集成电路(IC)卡的应用区,并对个人化过程中装载到卡片 的个人化数据进行检验,证实它们完整无损,且没有被修改; ●K ENC——用来生成IC卡密文和验证主机密文;

密钥管理规定 ●K DEK——用来加密在个人化过程中写入卡片的保密数据。 KMC对每个发卡行是独有的,而K MAC、K ENC和K DEK对每张卡是独有的。 b) 主密钥(MDK)——用来导出:UDK——用于联机的卡认证和发卡行认证。 就每个BIN(银行标识码)而言,MDK通常是唯一的,而UDK对每张卡都必须是唯一的。 c) 发卡行公私钥对——通常由发卡行生成,公钥应传输给中国金融集成电路(IC)卡认 证机构,供其创建发卡行公钥证书。私钥被保存在发卡行的HSM(主机加密模块)内。 d) 密钥交换密钥(KEK)——用来对发卡行个人化输入文件中的机密数据进行加密,每个 发卡行的KEK必须是唯一的。 e) 传输密钥(TK)——用来对数据准备系统向个人化系统传送的发卡行个人化输入文件 中的机密数据进行加密。 作为选择,也可以用发卡行公私钥对生成这些密钥。 f) ICC公私钥对——IC卡利用这一对密钥执行DDA和CDA/AC密文生成算法。其中,公钥须 经过发卡行私钥的签名,才能获得发卡行公钥证书。 每张卡的ICC公私钥对必须是独一无二的。 g) MDK ENC——用来导出:UDK ENC——用来加密发卡行的脚本机密信息。 h) MDK MAC——用来校验发卡行的脚本信息。 3.2.密钥的形成与分发 不同类型的加密算法支持《EMV卡个人化规范:2003》中的不同功能。然而,当加密算法没有得到正确实施时,加密算法的预定作用将受到负面的影响。一种安全的实施将取决于规范所需的不同密钥被签发者管理的好坏程度。以下材料的目的是提供不同算法类型所扮演的加密角色的一个概述,以及提出安全地管理密钥所必需的基本要求。 a) 非对称(SM2/RSA)密钥管理 IC卡的安全性取决于私钥(签名)的保护。不能保证用来对静态或动态数据元签名的私钥的安全性将使IC卡面临被伪造的风险。私钥面临的主要风险包括: ——成功地解决ECDLP问题,以及成功地分解RSA模数; ——私钥自身的泄漏。 为了限制这些风险所代表的潜在的泄露问题,我们推荐使用以下发卡行要求。私钥(签名)的安全性取决于许多因素,包括: ——SM2/RSA密钥模数位的长度,例如:256或者1024和1152; ——组成公钥/私钥模数的主要数字的质量; ——用来从物理上保障(保护)私钥(签名)不受未经授权的访问和暴露/危害的影响的方法,特别是当IC卡或其它安全加密设备(SCD)使用它们时为密钥提供的保护。 SM2/RSA密钥生成当生成SM2/RSA公私钥对时,推荐在一台物理安全的设备的受保护内存中完成这个过程。这种设备必须包含一个随机或伪随机数字生成器,执行原始校验例程,并支持篡改响应机制。 ——SM2/RSA私钥(签名)可能对物理安全设备而言是暂时性的; ——密钥生成将利用一个随机或伪随机过程,以使得不可能预测出任何密钥或者确定密钥空间中的某些密钥比其它任意密钥可能性更大; ——个人计算机或其它类似的不安全设备,即不被信任的设备,将永远不能用来生成SM2/RAS 公私钥对。 公司内部资料注意保密第页

安全通信中的密钥分发和密钥交换

安全通信中的密钥分发和密钥交换 ——07级计算机科学与技术<3>班单娟 【关键字】信息安全、密钥管理、密钥分发、密钥交换 【摘要】密钥分发(或密钥交换)可以有多种方法,它的安全性与采用的算法、信息交换的协议有紧密的联系。本文拟介绍一些常用的密钥分发或密钥交换方式,包括密钥的预分发、密钥的在线交换以及基于身份的密钥分发,同时介绍几个典型的应用。 随着现代通信技术的飞速发展,尤其是计算机网络技术日新月异的变化,越来越多的人希望通过现代的通信网络安全地交换信息。密码术在通信中的应用,使人们的这一愿望不再是幻想。在现代密码学中,对数据的保密一般不依赖于算法的保密,而仅仅依靠对密钥的保密。因此,要想获得安全的保障,就必须有安全可靠的密钥管理方法。 密钥管理是在一定的安全策略指导下的加密材料的产生、存储、分发、销毁、归档等过程。在安全通信系统的密钥管理中,一般需要设置一个可信机构,它负责验证用户的合法身份,有时也参与密钥的传送与交换过程。密钥管理通常采用离线的可信机构、在线的密钥分发中心和密钥证书中心等密钥管理单元进行。 密钥分发(或密钥交换)是密钥管理的核心问题。密钥分发(或密钥交换)是通信双方建立共同的加密材料的过程,要求确保加密材料的完整性、来源真实性和保密性。密钥分发协议或密钥协商协议的目的,是使得通信双方在实施了这种协议以后,可以建立一个共同的通信密钥,并且密钥的值不会被任何第三方所窃取(有时也包括权威机构)。 密钥预分发 密钥预分发就是在通信之前由可信机构通过安全的信道为参与通信的双方建立通信密钥。就密钥的预分发方式而言,对每一对通信伙伴u和v,权威机构需要随机地选择一个密钥作为用户U和V的通信密钥Ku,v,并通过一个安全信道把密钥Ku,v传给用户U和用户V。(由于网络是不安全的,所以密钥传输不能在网络上进行)。这种方案的安全性是无条件的,但它要求在可信机构和网络上的每个用户之间都要有一个安全信道。事实上,每个用户必须存储n-1个密钥,并且可信机构需要安全传送n2个密钥。即使对于相当小的网络,这样的费用也是难以承担的,所以这种方案实际上是行不通的。因此,如何减少需要传送和存储的信息量,同时还要保证每一对用户(u和v)能够独立地计算出一个共同的秘密密钥Ku,v就成为一个很有意义的工作。下面介绍的Blom密钥分发体制就能够做到这一点。 假定网络有n个用户。为了方便,假定密钥是从Zp(P是素数)里选出来的。设k是一个整数,1≤k≤n-2。在参数为k的Blom预分发体制中,权威机构要通过一个安全信道向每一个用户传送Zp中的k+1个元素。每一对用户(u和v)能够计算出一个密钥Ku,v=Kv,u。下面,我们看一下k=1时的情形。 (1)设素数p是公开的。对每个用户u,元素ruεZp是公开的,而且每个ur都不相同。 (2)权威机构选定三个随机数a,b,cεZp(可以相同),得到下面的多项式: f(x,y)=a+b(x+y)+cxy mod p (3)对每个用户U,权威机构计算多项式: gu(x)=f(x,ru)mod p并且通过安全信道把gu(x)

集中的密钥管理和自动密钥分发系统

摘要随着社会对安全存储和传输数据需求的迅猛增长,密码技术应用也在快速的发展。越来越多的敏感数据需要在开放网络上传输,密码技术提供了一种安全的满足各种应用需求的途径。通过数据加密技术、防篡改的数字签名、数字身份认证等来保护需要存储和传输的敏感数据。本文描述了一个为大量网络上的密码应用节点提供密码密钥服务的集中的密钥管理和自动密钥分发系统。 1 概述 目前密码应用节点多样性以及各种企业级应用的规模庞大,呈现了以下四个普遍的需求:(1)为所有应用无缝整合提供标准的密码API和开发包。 (2)密钥的自动分发及密钥可恢复。 (3)密钥的集中管理、策略的实施和安全审计。 (4)能够应对各种密码应用节点的硬件和操作系统的变化。 本文所介绍的密钥管理系统采用集中的管理机制,集中产生系统所需的密钥、配置数据、系统安全策略等。该系统具有以下特点: (1)密钥集中管理的功能:密钥集中产生、存储、归档、备份和恢复,根据需求灵活产生密钥、签发密钥,同时还支持密钥的自动流转。 (2)简单快速的改造便能适应各种采用不同软硬件的密码应用节点的需求:系统采用统一的密码体系,实行统一的密钥产生、配用、分发、存储、销毁、更换、恢复、安全管理和控制等方面的策略、机制和规范;提供统一的密钥分发接口,使用标准的密码算法和密钥长度;并为各种密码算法的密码操作提供标准安全的API以满足各种应用需求。 (3)可扩展的体系结构:系统将密钥管理与密钥分发分开,密钥集中由密钥管理服务器管理,根据网络上密码应用节点的地理位置的分布或所属管理部门的不同建立多个密钥分发服务点,每个分发点管理其职能范围内密码应用节点的密钥分发。密钥分发服务点的数量可以扩展,以满足各种规模的应用需求。 (4)基于硬件保护的安全体系:系统使用加密卡为系统各部件提供消息防篡改、消息加密保护、及系统管理员身份认证等密码服务。

第六章密钥分配与密钥管理,第五节,秘密分割

2013-1-158 秘密分割 Secrete Sharing 2013-1-15 9 秘密分割门限方案 导弹控制发射,重要场所通行检验,通常需要多人同时参与才能生效,需要将秘密分为多人掌管,并且由一定掌管秘密的人数同时到场才能恢复秘密。

2013-1-15 10 门限方案的一般概念 ?秘密s被分为n个部分,每个部分称为s hadow,由一个 参与者持有,使得 ?由k个或多于k个参与者所持有的部分信息可重构s。 ?由少于k个参与者所持有的部分信息则无法重构s。 ?称为(k,n)秘密分割门限方案,k称为门限值。 ?少于k个参与者所持有的部分信息得不到s的任何信 息称该门限方案是完善的。 Shadow影子,子秘密 用的很多,比如分布式系统里 2013-1-15 11 Sham i r门限方案 ?基于多项式Lagr ange插值公式 设{(x 1,y 1 ),…,(x k ,y k )}是平面上k个点构成的点 集,其中x i (i=1,…k,)各不相同,那么在平面上存在唯一的k-1次多项式f(x)通过这k个点.若把 秘密s取做f(0),n个s hadow取做f(x i )(i=1,…n),那么利用其中任意k个s hadow可以重构f(x),从 而可以得到秘密s 简单实用的方案,用的很多

2013-1-15 12 Sham i r 门限方案 ? 有限域G F(q),q 为大素数,q ≥n+1。秘密s 是G F(q)\{0}上均匀选取的随机数,表示为s ∈R G F(q)\{0}.k-1个系数a 1,a 2,…a k-1选取a i ∈R G F(q)\{0}.在G F(q)上构造一个k-1次多项式f (x)=a 0+a 1x+…+a k-1x k-1? N 个参与者P 1,…,P n ,P i 的Shadow 为f (i )。任意k 个参与者得到秘密,可使用{(i l ,f (i l ))|l =1,…,k}构造方程组 ??? ? ?=+++=+++----) ()()()()()(1110 1111110k k k k k k k i f i a i a a i f i a i a a 解k 个方程也能推导出lagrange 插值公式

密钥安全管理办法

密钥安全管理办法

目录 第一章概述错误!未定义书签。 第一节内容简介错误!未定义书签。 第二节运用概述错误!未定义书签。 1.密钥体系与安全级别错误!未定义书签。 2.密钥生命周期的安全管理错误!未定义书签。 第二章密钥生命周期安全管理错误!未定义书签。 第一节密钥的生成错误!未定义书签。 1加密机主密钥(根密钥)的生成错误!未定义书签。 2区域主密钥的生成错误!未定义书签。 3银行成员机构主密钥的生成错误!未定义书签。 4终端主密钥的生成错误!未定义书签。 5工作密钥的生成错误!未定义书签。 6终端MAC密钥的生成错误!未定义书签。 7工作表格错误!未定义书签。 第二节密钥的分发与传输错误!未定义书签。 1密钥分发过程错误!未定义书签。 2密钥传输过程错误!未定义书签。 3密钥接收错误!未定义书签。 第三节密钥的装载和启用错误!未定义书签。 1基本规定错误!未定义书签。 2注入过程错误!未定义书签。 第四节密钥的保管错误!未定义书签。 1.基本规定错误!未定义书签。 2.与密钥安全有关的机密设备及密码的保管错误!未定义书签。 3.密钥组件的保管错误!未定义书签。 4. 密钥档案资料的保管错误!未定义书签。 第五节密钥的删除与销毁错误!未定义书签。 1. 失效密钥的认定错误!未定义书签。 2. 密钥删除和销毁的方法错误!未定义书签。 第六节密钥的泄漏与重置错误!未定义书签。 1.可能被泄漏的密钥错误!未定义书签。 2.密钥泄漏的核查错误!未定义书签。 3.密钥泄漏和被攻破情况的界定错误!未定义书签。 第三章设备安全管理错误!未定义书签。 1.硬件加密机(HSM)安全及管理错误!未定义书签。 2.终端设备安全管理错误!未定义书签。 3.设备的物理安全错误!未定义书签。 第四章管理规定与监督检查错误!未定义书签。 1.组建密钥安全管理工作组错误!未定义书签。 2.密钥安全管理工作人员错误!未定义书签。

第六章密钥分配与密钥管理,第四节,随机数的产生

2013-1-714随机数的产生 Generation of Random Numbers 2013-1-7 15随机数的用途 ? 相互认证? 会话密钥的产生?公钥密码算法中的密钥产生 2013-1-7 16随机数的要求-随机性 ?均匀分布 ?数列中每个数出现的频率相等或近似相等 ?独立性? 数列中任一数不能由其他数推出?经常使用的是伪随机数列

2013-1-7 17 随机数的要求-不可预测性 ?对数列中以后的数是不可预测的 ?对于真随机数,满足独立性,所以不可预测 ?伪随机数列需要特别注意满足不可预测性 2013-1-7 18 随机数源 ?真随机数源-物理噪声产生器 ?离子辐射脉冲检测器 ?气体放电管 ?漏电容 ?数的随机性和精度不够 ?这些设备很难联入网络

线性同余法 目前中的最广泛的 线性同余法

2013-1-721伪随机数产生器-线性同余法? 迭代函数应是整周期的,在重复之前应出现0到m 间的所有数? 产生的数列看上去应是随机的? 迭代函数能有效的利用32为运算实现? 如果m 为素数,且a 为m 的本原根,产生的数列是整周期的。?a=16807,m=231-1,c=0 a=16807 m=2^31 -1 c=0 常用于模拟 2013-1-722伪随机数产生器-线性同余法?假定敌手知道X 0,X 1,X 2,X 3,可以确定参数 ?????+=+=+=m c aX X m c aX X m c aX X mo d mod mod 23 1201 密码场合用的比较少。

基于密码算法的随机数产生器 基于密码算法的随机数产生器?DES的输出反馈方式(OFB)模式 采用OFB模式能用来产生密钥并用 于流加密。加密算法的输出构成伪 随机序列 2013-1-75

相关文档
最新文档