实习二分组密码加密
一、实习目的
1.理解对称加密算法的原理,熟悉常用的对称加密算法:DES、TripleDES、Blowfish;
2.以DES加密算法为例,掌握分组加密算法加、解密过程的实现。
二、实习要求
1.实习前认真预习第5章有关内容;
2.熟悉java中的java.security.*和java.crypto.*中的相关类;
3.按要求认真撰写实习报告。
三、实习内容
1.[基本要求]
以DES/DESede为例,利用java中的相关类实现对指定字符串的加、解密。
2.[实现提示]
(1) 可以利用java中的KeyGenerator类创建对称秘钥,利用工厂类KeyGenerator 的静态方法getInstance()获得KeyGenerator()类对象;
(2) 方法getInstance()的参数为字符串类型,指定加密算法的名称如:Blowfish、DES、DESede、HmacMD5或HmacSHA1等;
(3) 利用工厂类Cipher的对象可以创建密码器。同样的,getInstance()的参数为字符串类型,指定加密算法的名称。
实验截图:
以DES加密为例,客户端:
客户端解密:
实习代码:
服务器MyServer类:
package Caesar_Modification;
import java.awt.EventQueue;
import java.awt.TextArea;
import javax.crypto.BadPaddingException; import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException; import javax.crypto.NoSuchPaddingException;
import javax.swing.JFrame;
import java.awt.Color;
import javax.swing.JButton;
import javax.swing.JLabel;
import sun.misc.BASE64Decoder;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import https://www.doczj.com/doc/8615409154.html,.ServerSocket;
import https://www.doczj.com/doc/8615409154.html,.Socket;
import java.security.InvalidKeyException; import java.security.Key;
import java.security.NoSuchAlgorithmException; public class MyServer {
private JFrame frame;
private static ServerSocket server_text; private static Socket you_text;
private static ServerSocket server_key; private static Socket you_key;
private static TextArea SDealWith_Before; private static TextArea SDealWith_After;
public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() {
try {
MyServer window = new MyServer();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public MyServer() throws IOException {
initialize();
}
private void initialize() throws IOException { frame = new JFrame();
frame.getContentPane().setBackground(Color.LIGHT_GR AY);
frame.setTitle("服务器端");
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE );
frame.getContentPane().setLayout(null);
final TextArea SDealWith_After = new TextArea();
SDealWith_After.setBounds(227, 103, 150, 115);
frame.getContentPane().add(SDealWith_After);
JLabel lblNewLabel = new JLabel("接收到的秘钥"); lblNewLabel.setBounds(227, 10, 93, 15);
frame.getContentPane().add(lblNewLabel);
JLabel label_1 = new JLabel("处理后");
label_1.setBounds(227, 78, 54, 15);
frame.getContentPane().add(label_1);
JButton button_1 = new JButton("清除");
button_1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { SDealWith_After.setText("");
SDealWith_Before.setText("");
}
});
button_1.setBounds(269, 228, 93, 23);
frame.getContentPane().add(button_1);
final TextArea Pri_KeyS = new TextArea();
Pri_KeyS.setBounds(227, 27, 150, 43);
frame.getContentPane().add(Pri_KeyS);
final TextArea SDealWith_Before = new TextArea();
SDealWith_Before.setBounds(10, 103, 156, 115);
frame.getContentPane().add(SDealWith_Before);
JButton btnNewButton_1 = new JButton("开启秘钥通道");
btnNewButton_1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) { try {
server_key = new ServerSocket(5679);
you_key = server_key.accept();
Pri_KeyS.setText("秘钥已传送。");
} catch (IOException e1) {
e1.printStackTrace();
}
}
});
btnNewButton_1.setBounds(10, 6, 150, 23);
frame.getContentPane().add(btnNewButton_1);
JButton btnNewButton = new JButton("解密");
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) { try {
InputStream in =
you_text.getInputStream();
InputStream is =
you_key.getInputStream();
ObjectInputStream b = new ObjectInputStream(is);
Key k1 = (Key)b.readObject();
b.close();
int total_ctext = in.available();
byte[]ctext = new byte[total_ctext];
byte[]ptext = new byte[total_ctext];
Cipher cp = Cipher.getInstance("DES");
cp.init(Cipher.DECRYPT_MODE, k1);
BufferedReader br= new BufferedReader(new InputStreamReader(in));
String cstring = br.readLine();
BASE64Decoder base64decoder = new
BASE64Decoder();
ctext =
base64decoder.decodeBuffer(cstring);
ptext = cp.doFinal(ctext);
String p = new String(ptext,"UTF8");
SDealWith_Before.setText(cstring);
SDealWith_After.setText(p);
} catch (IOException e2) {
e2.printStackTrace();
} catch (NoSuchAlgorithmException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (NoSuchPaddingException e1) { // TODO Auto-generated catch block
e1.printStackTrace();
} catch (InvalidKeyException e1) { // TODO Auto-generated catch block
e1.printStackTrace();
} catch (IllegalBlockSizeException e1) { // TODO Auto-generated catch block
e1.printStackTrace();
} catch (BadPaddingException e1) { // TODO Auto-generated catch block
e1.printStackTrace();
} catch (ClassNotFoundException e1) { // TODO Auto-generated catch block
e1.printStackTrace();
}
try {
you_text.close();
server_text.close();
server_key.close();
you_key.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
});
btnNewButton.setBounds(111, 228, 93, 23);
frame.getContentPane().add(btnNewButton);
JButton btnNewButton_2 = new JButton("开启密文通道");
btnNewButton_2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) { try {
server_text = new ServerSocket(5678);
you_text = server_text.accept();
} catch (IOException e1) {
e1.printStackTrace();
}
}
});
btnNewButton_2.setBounds(10, 39, 150, 23);
frame.getContentPane().add(btnNewButton_2);
JLabel lbldes = new JLabel("通过DES加密后");
lbldes.setBounds(20, 74, 93, 23);
frame.getContentPane().add(lbldes);
}
}
客户端MyClient类:
package Caesar_Modification;
import java.awt.EventQueue;
import java.awt.TextArea;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import java.security.Key;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.JLabel;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.Color;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import https://www.doczj.com/doc/8615409154.html,.Socket;
import https://www.doczj.com/doc/8615409154.html,.UnknownHostException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import javax.swing.JTextArea;
import sun.misc.BASE64Encoder;
public class MyClient {
private JFrame frame;
private JTextField Login_C;
private static TextArea CDealWith_Before;
private static TextArea Pri_KeyC;
private static Key secretkey;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
MyClient window = new MyClient();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public MyClient() {
initialize();
}
private void initialize() {
frame = new JFrame();
frame.getContentPane().setBackground(Color.LIGHT_GRAY);
frame.setTitle("客户端");
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
JLabel lblNewLabel = new JLabel("明文");
lblNewLabel.setBounds(169, 18, 112, 33);
frame.getContentPane().add(lblNewLabel);
final TextArea CDealWith_Before = new TextArea();
CDealWith_Before.setBounds(169, 61, 242, 143);
frame.getContentPane().add(CDealWith_Before);
JButton btnNewButton_1 = new JButton("加密");
btnNewButton_1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Socket mySocket_text;
String str_before = "";
try {
mySocket_text = new Socket(Login_C.getText(),5678);
OutputStream os= null;
os = mySocket_text.getOutputStream();
PrintWriter pw = new PrintWriter(os);
str_before = CDealWith_Before.getText();
Cipher cp = Cipher.getInstance("DES");
//初始化Cipher对象
cp.init(Cipher.ENCRYPT_MODE, secretkey);
byte[] ptext = str_before.getBytes("UTF8");//指定UTF8字符集,可以跨平台
byte[] ctext;
try {
ctext = cp.doFinal(ptext);
BASE64Encoder base64encoder = new BASE64Encoder();
pw.write(base64encoder.encode(ctext));
pw.close();
} catch (IllegalBlockSizeException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (BadPaddingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}//加密序列化
mySocket_text.close();
}catch (UnknownHostException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
} catch (NoSuchAlgorithmException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (NoSuchPaddingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (InvalidKeyException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (Exception e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
}
});
btnNewButton_1.setBounds(169, 228, 93, 23); frame.getContentPane().add(btnNewButton_1);
Login_C = new JTextField();
Login_C.setBounds(23, 82, 93, 22);
frame.getContentPane().add(Login_C);
Login_C.setColumns(10);
JButton button = new JButton("清除");
button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { CDealWith_Before.setText("");
Pri_KeyC.setText("");
}
});
button.setBounds(305, 228, 93, 23);
frame.getContentPane().add(button);
JLabel Login_name = new JLabel("服务器地址"); Login_name.setBounds(23, 57, 93, 15);
frame.getContentPane().add(Login_name);
JButton button_1 = new JButton("发送秘钥");
button_1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Socket mySocket_key;
try {
mySocket_key = new Socket(Login_C.getText(),5679);
KeyGenerator kg = KeyGenerator.getInstance("DES");
kg.init(56);//DESede默认秘钥长度为168bit
secretkey = kg.generateKey();
ObjectOutputStream os_key = new ObjectOutputStream(mySocket_key.getOutputStream());
os_key.writeObject(secretkey);
os_key.close();
mySocket_key.close();
} catch (UnknownHostException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
} catch (NoSuchAlgorithmException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
});
button_1.setBounds(23, 158, 93, 23);
frame.getContentPane().add(button_1);
}
}
实验总结:
本次实验结合了第一次实验的成果,将秘钥和密文分别使用第一次实验的结果通信,运用JA V A自带的加密方法进行加密。其中,本次实验调试的时间特别长,总是在加解密的时候出现问题,最后发现服务器和客户端所引的自带的加密的包不同造成的,也通过这个了解了更多的知识。
实验二非对称加密实验 姓名:张儒雅学号:20111120075专业:信息安全 指导老师:金鑫成绩: 一、实验目的 了解非对称密码的加密和解密特点,理解加密解密与数字签名的基本原理,掌握PGP加密的原理,使用PGP加密软件加密信息。 了解PGP的各种原理后,安装PGP以及在安装后使用PGP加密文件以及邮件! 二.实验内容 1.实验原理: 在此次实验中所使用PGP加密是一种基于公钥原理以对在通信领域中对其内容进行加密以保证通信的安全性 加密电子邮件: 我们一般的Email是明码传送的,在经过Internet上多个主机转发后,我们无法保证它不曾被他人截获过。使用PGP则可以非常安全地发送机密信件。首先用明码传送或查数据库服务器得到收件人的"publickey",然后用这个"public key"先加密要发他的信件,再发送出去。由于这封信只有与这个"publickey"对应的"private key"能解,而" private key"只掌握在收件人手中,即使别人截获这封信也不可能解得开,从而保证了信件的安全。 电子签名: 当您往INTERNET上发送一篇文章或一个文件时,别人怎么保证这是您发的而不是冒名顶替的呢?用电子签名就可以解决这个问题。您先用您的"privatekey"加密您的签名,然后发出去。别人收到以后就用您的"public key"去解,如果解开了,那您就是货真价实的了。解不开的话,肯定是冒名顶替的。因为您的"privatekey"只有您个人才拥有,谁都不可能伪造。 2.实验步骤 在本次实验中首先安装PGP,在windows xp操作系统上进行实验 1.安装步骤: (此处大致描述一下) 点击安装程序,我们在这里选择在WindowsXP中安装的是PGP8的软件,点击打开安装界面后按照步骤选择操作,在第二步选择组件时注意一下:
国内外分组密码理论与技术的研究现状及发展趋势 1 引言 密码(学)技术是信息安全技术的核心,主要由密码编码技术 和密码分析技术两个分支组成。密码编码技术的主要任务是寻求产 生安全性高的有效密码算法和协议,以满足对数据和信息进行加密 或认证的要求。密码分析技术的主要任务是破译密码或伪造认证信 息,实现窃取机密信息或进行诈骗破坏活动。这两个分支既相互对 立又相互依存,正是由于这种对立统一的关系,才推动了密码学自 身的发展[6]。目前人们将密码(学)理论与技术分成了两大类, 一类是基于数学的密码理论与技术,包括分组密码、序列密码、公 钥密码、认证码、数字签名、Hash函数、身份识别、密钥管理、 PKI技术、VPN技术等等,另一类是非数学的密码理论与技术,包括 信息隐藏、量子密码、基于生物特征的识别理论与技术等。 在密码(学)技术中,数据加密技术是核心。根据数据加密所 使用的密钥特点可将数据加密技术分成两种体制,一种是基于单密 钥的对称加密体制(传统加密体制),包括分组密码与序列密码, 另一类是基于双密钥的公钥加密体制。本文主要探讨和分析分组密 码研究的现状及其发展趋势。 2 国内外分组密码研究的现状 2.1 国内外主要的分组密码 美国早在1977年就制定了本国的数据加密标准,即DES。随着 DES的出现,人们对分组密码展开了深入的研究和讨论,已有大量 的分组密码[1,6],如DES的各种变形、IDEA算法、SAFER系列算 法、RC系列算法、Skipjack算法、FEAL系列算法、REDOC系列算 法、CAST系列算法以及Khufu,Khafre,MMB,3- WAY,TEA,MacGuffin,SHARK,BEAR,LION,CA.1.1,CRAB,Blowfish,GOST,SQUA 算法和AES15种候选算法(第一轮),另有NESSIE17种候选算法 (第一轮)等。 2.2 分组密码的分析 在分组密码设计技术不断发展的同时,分组密码分析技术也得 到了空前的发展。有很多分组密码分析技术被开发出来,如强力攻 击(穷尽密钥搜索攻击、字典攻击、查表攻击、时间存储权衡攻 击)、差分密码分析、差分密码分析的推广(截段差分密码分析、 高阶差分密码分析、不可能差分密码分析)、线性密码分析、线性 密码分析的推广(多重线性密码分析、非线性密码分析、划分密码 分析)、差分线性密码分析、插值攻击、密钥相关攻击、能量分 析、错误攻击、定时攻击等等。 其中,穷尽密钥搜索攻击是一种与计算技术密不可分的补素密码分 析技术,也是最常用的一种密码分析技术。通过这种技术,可以破 译DES的算法。在DES最初公布的时候,人们就认为这种算法的密钥 太短(仅为56bit),抵抗不住穷尽密钥搜索的攻击。因此,1997 年1月28日,美国colorado的程序员Verser从1997年3月13日起, 在Internet上数万名志愿者的协同下,用96天的时间,于1997年6
非对称加密实验 【实验环境】 ISES客户端 Microsoft CLR Debugger 2005或其它调试器 【实验内容】 通过运算器工具实现RSA和ElGamal算法的加解密计算 手工计算RSA密钥并检验,将其应用于签名中并验证 对RSA密钥生成、RSA密钥加密、ElGamal参数生成、ElGamal密钥生成和ElGamal加密进行算法跟踪 非对称加密实验 【实验原理】 非对称密码体制又称为公钥密码体制,加解密使用公私钥密钥对,私钥由密钥拥有者保管,公钥可以公开,基于公开渠道进行分发,解决了对称密钥体制中密钥管理、分发和数字签名等难题。 一、 RSA算法 RSA公钥算法由Rivest、Shamir、Adleman于1978年提出的,是目前公钥密码的国际标准。算法的数学基础是Euler定理,是基于Deffie-Hellman的单项陷门函数的定义而给出的第一个公钥密码的实际实现,其安全性建立在大整数因子分解的困难性之上。 RSA算法的明文空间M=密文空间C=Z整数,其算法描述如下: n (1) 密钥生成 随机选择两个大素数p和q,计算n=p?q,;选择一个随机整数e<,满足,计算整数;公开公钥(n,e),安全的销毁p、q和,并保留(d,n)作为私钥。
(2) 加密 (3) 解密 使用中国剩余定理可以加速RSA密码算法的实现。 二、 ElGamal算法 ElGamal算法是Deffie-Hellman单项陷门函数的一个成功应用,把函数转化为公钥加密体制,其安全性建立在有限域上的离散对数问题。 ElGamal算法的描述如下: (1) 密钥生成 随机选择一个素数p,计算p个元素的有限域的乘法群的一个随机乘法生成元g;均匀随机地在模p-1的整数集合中选取x,计算;把(p,g,y)作为公钥公开,把(p,g,x)作为私钥。 (2) 加密 均匀随机地在模p-1的整数集合中选取k,消息m
实验报告样式 湖北文理学院《对称密码算法DES》 实验报告 专业班级: 姓名: 学号: 任课教师: 2014 年9 月29 日
实验项目名称 一、实验目的 理解对称加密算法的原理和特点;理解DES算法的加密原理。 二、实验原理 对称密钥加密机制即对称密码体系,也称为单钥密码体系和传统密码体系。对称密码体系通常分为两大类,一类是分组密码(如DES、AES算法),另一类是序列密码(如RC4算法)。 对称密码体系加密和解密时所用的密钥是相同的或者是类似的,即由加密密钥可以很容易地推导出解密密钥,反之亦然。同时在一个密码系统中,我们不能假定加密算法和解密算法是保密的,因此密钥必须保密。发送信息的通道往往是不可靠的或者不安全的,所以在对称密码系统中,必须用不同于发送信息的另外一个安全信道来发送密钥。 三、实验内容及过程 本练习主机A、B为一组,C、D为一组,E、F为一组。 首先使用“快照X”恢复Windows系统环境。 一.DES加密解密 (1)本机进入“密码工具”|“加密解密”|“DES加密算法”|“加密/解密”页签,在明文输入区输入明文:HelloWorld 。 (2)在密钥窗口输入8(64位)个字符的密钥k,密钥k= abcdefgh 。单击“加密”按钮,将密文导出到DES文件夹(D:\Work\Encryption\DES\)中,通告同组主机获取密文,并将密钥k告诉同组主机。
(3)单击“导入”按钮,从同组主机的的DES共享文件夹中将密文导入,然后在密钥窗口输入被同组主机通告的密钥k,点击“解密”按钮进行DES解密。
(4)将破解后的明文与同组主机记录的明文比较。 二.DES算法 本机进入“密码工具”|“加密解密”|“DES加密算法”|“演示”页签,向64位明文中输入8个字符(8*8bit=64),向64位密钥中输入8个字符(8*8bit=64)。点击“加密”按钮。完成加密操作,分别点击“初始置换”、“密钥生成演示”、“十六轮加密变换”和“终结置换”按钮,查看初始置换、密钥生成演示、十六轮加密变换和终结置换的详细加密操作流程。 四、实验总结与体会 本次试验主要考察对称加密算法的原理和特点以及理解DES算法的加密原理。我们在虚拟机的windows环境下进行了试验操作,在实验的过程中有许多的细节需要注意,首先在进入虚拟机环境时,要选择windows环境,虽然linux系统下也可以进行试验操作但是与本次实验要求不符而无法得出正确的实验结果。在加密完成后,需要传输到队友的电脑上进行解密操作,而传输对IP地址有严格的要求,若IP地址修改过则无法正常传输。 在老师的帮助和同学的协助下顺利完成了本次实验,通过这次实验,对DES算法有了更深的了解,一些课堂上的疑问也得到了解决。
第3章 分组密码 习题及参考答案 1. 设DES 算法中,明文M 和密钥K 分别为: M =0011 1000 1100 0100 1011 1000 0100 0011 1101 0101 0010 0011 1001 1110 0101 1110 K =1010 1001 0011 0101 1010 1100 1001 1011 1001 1101 0011 1110 1101 0101 1100 0011 求L 1和R 2。 解: 初始变换IP : 1001 1010 1101 0101 1101 0010 0011 1000 0101 0110 0010 0101 1100 0101 1110 1000 则,0L =1001 1010 1101 0101 1101 0010 0011 1000 0R =0101 0110 0010 0101 1100 0101 1110 1000 K 去校验位得: 0C =1101 0111 1100 0000 0010 0111 0111 0D =1010 1000 0111 0110 0011 0101 0010 循环左移一位:1C =1010 1111 1000 0000 0100 1110 1111 1D =0101 0000 1110 1100 0110 1010 0101 经过置换选择得到:1K =0000 1111 0110 1000 1101 1000 1001 1010 1000 0111 0011 0001 同样可以得到:2K =0101 0101 0110 0001 1101 1101 1011 0101 0101 0000 0110 1110 1L =0R =0101 0110 0010 0101 1100 0101 1110 1000
对称加密算法 一、网络安全 1.网络安全 (1) 网络的安全问题:有以下四个方面 A. 端-端的安全问题,主要指用户(包括代理)之间的加密、鉴别和数据完整性维护。 B. 端系统的安全问题,主要涉及防火墙技术 C. 安全服务质量问题,主要指如何保护合法用户的带宽,防止用户非法占用带宽。 D. 安全的网络基础设施,主要涉及路由器、DNS服务器,以及网络控制信息和管理信息的安全问题。 (2)网络的安全服务:有以下五个方面 A.身份认证:这是考虑到在网络的应用环境下,验证身份的双方一般是通过网络而非直接交互,所以传统的验证手段如根据对方的指纹等方法就无法应用。同时大量的黑客随时都可能尝试向网络渗透,截获合法用户的口令并冒充顶替,以合法身份入网。所以应该提供一种安全可靠的身份认证的手段。 B.授权控制:授权控制是控制不同用户对信息资源的访问权限。授权控制是以身份认证为基础的。通过给不同用户的提供严格的不同层次和不同程度的权限,同时结合可靠的身份认机制,可以从很大程度上减少非法入侵事件发生的机会。 C.数据加密:数据加密技术顾名思义。在互联网上应用加密技术来保证信息交换的可靠性已经的到了人们普遍的认可,已经进入了应用阶段。目前的加密技术主要有两大类:一类是基于对称密钥加密的算法,另一类是基于非对称密钥加密的算法。它们都已经达到了一个很高的强度,同时加密算法在理论上也已经相当的成熟,形成了一门独立的学科。而从应用方式上,一般分成软件加密和硬件加密。前者成本低而且实用灵活,更换也方便;而后者加密效率高,本身安全性高。在应用中,可以根据不同的需要来进行选择。 D.数据完整性:数据完整性是指通过网上传输的数据应该防止被修改、删除、插入、替换或重发,以保证合法用户接收和使用该数据的真实性。 E.防止否认:在网上传输数据时,网络应提供两种防止否认的机制:一是防止发送方否认自己发送过的信息,而谎称对方收到的信息是别人冒名或篡改过的;二是防止接收方否认自己收到过信息。利用非对称加密技术可以很好的实现第一个否认机制。 二、加密技术 (1) 加密技术的产生和发展 A. 古代,目前记录的比较早的是一个在公元前2世纪,由一个希腊人提出来的,26个字母放在一个5×5的表格里,这样所有的源文都可以行列号来表示。 B. 近代,在第二次世界大战里,密码机(如紫罗兰)得到了比较广泛的已经技术,同时破译密码的技术也得到了发展,出现了一次性密码技术。同时密码技术也促进了计算机的发展。 C. 现代,由于计算机和计算机网络的出现,对密码技术提出了更高的需求。密码学的论文和会议不断的增加,以密码技术为主的商业公司开始出现,密码算法层出不穷,并开始走向国际标准化的道路,出现了DES,AES等国家(美国的)标准。同时各个国家和政府对密码技术也越来越重视,都加密技术的出口和进口都作了相当严格的规定。 (2) 加密技术的分类 A.对称加密技术 a. 描述 对称算法(symmetric algorithm),有时又叫传统密码算法,就是加密密钥能够从解密密钥中推算出来,同时解密密钥也可以从加密密钥中推算出来。而在大多数的对称算法中,加密密钥和解密密钥是相同的。所以也称这种加密算法为秘密密钥算法或单密钥算法。它要求发送方和接收方在安全通信之前,商定一个密钥。对称算法的安全性依赖于密钥,泄漏密钥就意味着任何人都可以对他们发送或接收的消息解密,所以密钥的保密性对通信性
实验二分组密码算法DES 一、实验目的 通过用DES算法对实际的数据进行加密和解密来深刻了解DES的运行原理。 二、实验原理 分组密码是一种对称密码体制,其特点是在明文加密和密文解密的过程中,信息都是按照固定长度分组后进行处理的。在分组密码的发展历史中,曾出现了许多优秀的算法,包括DES,IDEA,AES,Safer++等等。下面以DES算法为例介绍分组密码算法的实现机制。 DES算法将明文分成64位大小的众多数据块,即分组长度为64位。同时用56位密钥对64位明文信息加密,最终形成64位的密文。如果明文长度不足64位,即将其扩展为64位(如补零等方法)。具体加密过程首先是将输入的数据进行初始置换(IP),即将明文M中数据的排列顺序按一定的规则重新排列,生成新的数据序列,以打乱原来的次序。然后将变换后的数据平分成左右两部分,左边记为L0,右边记为R0,然后对R0实行在子密钥(由加密密钥产生)控制下的变换f,结果记为f(R0,K1),再与L0做逐位异或运算,其结果记为R1,R0则作为下一轮的L1。如此循环16轮,最后得到L16、R16,再对L16、R16实行逆初始置换IP-1,即可得到加密数据。解密过程与此类似,不同之处仅在于子密钥的使用顺序正好相反。DES全部16轮的加密过程如图1-1所示。 DES的加密算法包括3个基本函数: 1.初始置换IP 它的作用是把输入的64位数据块的排列顺序打乱,每位数据按照下面的置换规则重新排列,即将第58位换到第一位,第50位换打第2位,…,依次类推。置换后的64位输出分为L0、R0(左、右)两部分,每部分分别为32位。 58 50 42 34 26 18 10 2 60 52 44 36 28 20 12 4 62 54 46 38 30 22 14 6 64 56 48 40 32 24 16 8 57 49 41 33 25 17 9 1 59 51 43 35 27 19 11 3 61 53 45 37 29 21 13 5 63 55 47 39 31 23 1
对称密码基本加密实验 【实验内容】 通过运算器工具实现DES、3DES、IDEA、AES-128/192/256、SMS4等算法的加解密计算 通过流程演示工具完成DES算法加解密运算的逐步演示和实例演示 通过轮密钥查看工具查看3DES和AES的轮密钥生成过程 查看AES算法逐步计算的动画演示 对DES、3DES、IDEA、AES-128/192/256、SMS4等算法的加解密进行扩展实验 对DES、3DES、IDEA、AES-128/192/256、SMS4等算法的加解密进行算法跟踪 对称密码基本加密实验 【实验原理】 对称密码体制使用相同的加密密钥和解密密钥,其安全性主要依赖于密钥的保密性。分组密码是对称密码体制的重要组成部分,其基本原理为:将明文消息编码后的序列m0,m1,m2,…,m i划分为长度为L(通常为64或128)位的组m=(m0,m1,m2,…,m L-1),每组分别在密钥k=(k0,k1,k2,…,k t-1)(密钥长度为t)的控制下变换成等长的一组密文输出序列c=(c0,c1,c2,…,c L-1)。分组密码的模型如图1.1.4-1所示。 012t-1012t-1 图1.1.4-1 分组密码实际上是在密钥的控制下,从一个足够大和足够好的置换子集中简单而迅速地选出一个置换,用来对当前输入的明文分组进行加密变换。现在所使用的对称分组加密算法大多数都是基于Feistel分组密码结构的,遵从的基本指导原则是Shannon提出的扩散和混乱,扩散和混乱是分组密码的最本质操作。 分组密码与流密码的对比:分组密码以一定大小的分组作为每次处理的基本单元,而流密码则以一个元素(如一个字母或一个比特)作为基本的处理单元;流密码使用一个随时间变化的加密变换,具有转换速度快、低错误传播的优点,软硬件实现简单,缺点是低扩散、插入及修改不敏感;分组密码使用的是一个不对时间变化的固定变换,具有扩散性好、插入敏感等优点,缺点是加解密处理速度慢、存在错误传播。 一、DES算法 数据加密标准(Data Encryption Standard,DES)中的算法是第一个也是最重要的现代对称加密算法,其分组长度为64比特,使用的密钥长度为56比特(实际上函数要求一个64位的密钥作为输入,但其中用到的有效长度只有56位,剩余8位可作为奇偶校验位或完全随意设置),DES加解密过程类似,加解密使用同样的算法,唯一不同的是解密时子密钥的使用
第八节 分组密码的工作模式和一般设计原理 1
分组密码的工作模式 为什么要设计工作模式? 分组密码的工作模式是:根据不同的数据格式和安全性要求, 以一个具体的分组密码算法为基础构造一个分组密码系统的方法。分组密码的工作模式应当力求简单, 有效和易于实现。 2
1980年12月, FIPS 81标准化了为DES开发 的五种工作模式。这些工作模式适合任何分组密码。现在, AES的工作模式正在研发, 这些AES 的工作模式可能会包含以前DES的工作模式, 还 有可能包括新的工作模式。我们仅以DES为例介 绍分组密码主要的五种工作模式。 3
4直接使用DES 算法对64bit 的数据进行加密的工作模式就是ECB 模式。在这种工作模式下, 加密变换和解密变换分别为: DES ()i i k c m = i =1,2,… (4.12) 1DES ()i i k m c ?= i =1,2,… (4.13) 这里k 是DES 的种子密钥, i m 和i c 分别是第i 组明文和密文。 电码本(ECB)模式
在给定密钥下, i m有64 2种可能的取值, i c也有64 2种可能的取值, 各(i m, i c)彼此独立, 构成一个巨大的单表代替密码, 因而称其为电码本模式。 5
+=,则相应的密文ECB模式的缺点是:如果n i i m m +=,即在给定密钥k下,同一明文组总是产生同n i i c c 一密文组,这会暴露明文组的数据格式。某些明文的数据格式会使得明文组有大量的重复或较长的零串,一些重要的数据常常会在同一位置出现,特别是格式化的报头、作业号、发报时间、地点等特征都将被泄露到密文之中,使攻击者可以利用这些特征。 6
云南大学数学与统计学实验教学中心实验报告 一、实验目的: 通过实验掌握AES加密实验的构造算法,以及其重要思想。 二、实验内容: 查阅资料,实现AES密码体制的编码算法、译码算法、子密钥生成算法 三、实验环境 Win7、Eclipse 四、实验过程(请学生认真填写): 实验过程、结果以及相应的解释: 1. 预备知识 密码学中的高级加密标准(Advanced Encryption Standard,AES),是一种对称加密的方法。 本实验使用Java平台来编写的,虽然在java中已经很好的实现了AES等安全机制,但是为了了解如何实现,还是写了一个AES加密的java程序。 2. 实验过程 A、原理分析: 大多数AES计算是在一个特别的有限域完成的。 AES加密过程是在一个4×4的字节矩阵上运作,这个矩阵又称为“体(state)”,其初值就 是一个明文区块(矩阵中一个元素大小就是明文区块中的一个Byte)。(Rijndael加密法因支 持更大的区块,其矩阵行数可视情况增加)加密时,各轮AES加密循环(除最后一轮外)均 包含4个步骤: AddRoundKey —矩阵中的每一个字节都与该次回合金钥(round key)做XOR运算;每个子 密钥由密钥生成方案产生。 SubBytes —通过一个非线性的替换函数,用查找表的方式把每个字节替换成对应的字节。 ShiftRows —将矩阵中的每个横列进行循环式移位。 MixColumns —为了充分混合矩阵中各个直行的操作。这个步骤使用线性转换来混合每列的 四个字节。 最后一个加密循环中省略MixColumns步骤,而以另一个AddRoundKey取代。 B、具体代码如下: //如6.2,若是将每一行看做是一个对象的话 //具体实现的整体结构思想如此下图
国家标准《信息安全技术分组密码算法的工作模式》 (征求意见稿)编制说明 一、工作简况 1、任务来源 本标准由国家标准化管理委员会下达的国家标准编制计划,项目名称为《信息安全技术分组密码算法的工作模式》(国标计划号:),项目类型为标准修订,项目所属工作组为WG3工作组,项目牵头单位为成都卫士通信息产业股份有限公司。 2、主要起草单位和工作组成员 该标准由成都卫士通信息产业股份有限公司主要负责起草,中国科学院软件研究所、中国科学院数据与通信保护研究教育中心、国家密码管理局商用密码检测中心、格尔软件股份有限公司、西安西电捷通无线网络通信股份有限公司、上海信息安全工程技术研究中心、……共同参与了该标准的起草工作。主要起草人有:张立廷,眭晗,涂彬彬,王鹏,毛颖颖,郑强,张国强,徐明翼,罗俊。 3、主要工作过程 2019年4月之前,编制团队分析GB/T 17964-2008标准文本及理论研究、行业应用情况,认为有必要修订该标准,原因如下: 1)学术界持续分析研究工作模式,产生了新的成果;产业界广泛应用工作模式,积攒了新的应用经验;有必要收集归纳。 2)现有标准文本未列举国家标准分组密码算法对应的测试向量,数据加密厂商、相关管理部门缺乏具体的参考数据。 3)产业界对现有标准之外的部分工作模式存在着强烈的应用需求,如磁盘加密模式XTS等,有必要评估引进的可行性。 4)国家标准化推进过程中,产生了与本标准相关的一些标准,如GB/T 36624-2018 《信息技术安全技术可鉴别的加密机制》,有必要在修订版本中做出协调性说明。 2019年4月,全国信息安全标准化技术委员会(以下简称“信安标委”)2019年第一次工作组会议周,在WG3工作组会议上,编制团队向专家和工作组成员单位汇报了《信息安全技术分组密码算法的工作模式》(投票草案稿)修订情况,
密码学应用-对称加密算法DES的应用 实验虚拟主机用户密码如下: H-basiclinux--1主机: 用户:root 密码:123456 第一步、进入basiclinux 实验机,开始实验 第二步、基本加密 1) 看明文文件a.txt # cat a.txt 2) 执行#openssl des3 -pass pass:"123" -in a.txt -out a.txt.des3
注:其中加密算法是des3,密钥是123,明文文件是a.txt, 密文文件是a.txt.des3 加密结果在a.txt.des3中。 3) 查看a.txt.des3 的内容#cat a.txt.des3 第三步、基本解密 执行#openssl enc -d -des3 -pass pass:"123" -in a.txt.des3 -out b.txt 第四步、3des算法的初始值
除密钥,明文文件外,3des 算法需要salt,key和iv值。通过以下命令可以获得 从上述操作可以获得des3 加密的三个初始值:salt,key 和iv。 第五步、每次加密3des 加密的初始值是不同的 执行多次#openssl enc -P -des3 -pass pass:123 -in a.txt 由于key 是由salt + pass 生成的,尽管pass 都相同,但key 都是不同的, 第五步、缺省的加密过称是使用salt 的,加盐法的最大特色是增加加密强度,它是一种动态方法。经过加盐处理可以做到,即使用同样的明文、同样的用户密码每次加密得到的密文都不一样,密码、明文、密文没有固定的对应关系这样当然不好分析了。下面我们使用没
SM4算法、AES算法、DES算法三种分组密码的基础分析 分组密码当中代表性的SM4算法、AES算法、DES算法在计算机和通信系统中起着重要的实际作用,每一种的算法都会有其独有的一份结构,讲解起来其实每一种都有很大的一个篇幅。在这里主要是把这几种密码算法放在一起做一个简单的分析,也可以通过了解每一种算法来比较一下三者之间的差别。 那么,我们就通过了解SM4算法、AES算法、DES算法这几种有代表性的近代分组密码来讨论一下分组密码的基本理论及其在计算机和通信系统中的实际应用。 1、SM4算法 SM4密码算法是一个分组算法,其算法设计简沽,结构有特点,安全高效。数据分组长度为128比特,密钥长度为128比特。加密算法与密钥扩展算法均采取32轮迭代结构。SM4密码算法以字节8位和字节32位作为单位进行数据处理。SM4密码算法是对合运算,因此解密算法与加密算法的结构相同,只是轮密钥的使用顺序相反,解密轮密钥是加密轮密钥的逆序。 SM4密码算法结构 SM4算法的基本内容有以下几方面: 基本运算:SM4密码算法使用模2加和循环移位作为基本运算。 基本密码部件:SM4密码算法使用了S盒、非线性变换τ、线性变换部件L、合成变换T基本密码部件。 轮函数:SM4密码算法采用对基本轮函数进行迭代的结构。利用上述基本密码部件,便可构成轮函数。SM4密码算法的轮函数是一种以字为处理单位的密码函数。 加密算法:SM4密码算法是一个分组算法。数据分组长度为128比特,密钥长度为128比特。加密算法采用32轮迭代结构,每轮使用一个轮密钥。 解密算法:SM4密码算法是对合运算,因此解密算法与加密算法的结构相同,只是轮密铝的使用顺序相反,解密轮密钥是加密轮密钥的逆序。 密钥扩展算法:SM4密码算法使用128位的加密密钥,并采用32轮法代加密结构,每一轮加密使用一个32位的轮密钥,共使用32个轮密钥。因此需要使用密钥扩展算法,从加密密钥产生出32个轮密钥。 SM4的安全性:SM4密码算法经过我国专业密码机构的充分分析测试,可以抵抗差分攻击、线性攻击等现有攻击,因此是安全的。 2、AES算法 2000年10月2日美国政府正式宣布选中比利时密码学家JoanDaemen和VincentRijmen提出的一种密码算法RJNDAEL作为AES,目前AES己经被一些国际标准化组织ISO,IETF,IEEE802.11等采纳作为标准。RIJNDAEL算法之所以能够最终被选为AES的原因是其安全、性能好、效率高、实用、灵活。RIJNDAEL算法是一个数据块长度和密钥长度都可变的分组加密算法,其数据块长度和密钥长度都可独立地选定为大于等于128位且小于等于256位的32位的任意倍数。 RIJNDAEL算法结构图 AES算法的基本内容有以下几方面: 状态:在RIJNDAEL算法中,加解密要经过多次数据变换操作,每一次变换操作产生一个中间结果,称这个中间结果叫做状态。各种不向的密码变换都是对状态进行的。 轮函数:RIJNDAEL加密算法的轮函数采用代替置换网络结构SP结构,由S盒变换ByteSub、行移位变换ShiftRow、列混合变换MixColumn、圈密钥加变换AddRoundKey组成。 圈密钥产生算法:圈密钥根据圈密钥产生算法由用户密钥产生得到,圈密钥产生分两步进行:密钥扩展和圈密钥选择。 加密算法:RIJNDAEL加密算法由一个初始圈密钥加、Nr-l圈的标准轮函数、最后一圈的非标准轮函数组成。 解密算法:RIJNDAEL算法不是对合运算,因此RIJNDAEL的解密算法与加密算法不同。由于RIJNDAEL设计得非常巧妙,使得我们只要略稍改变一下密钥扩展策略,便可以得到等价的解密算法,等价解密算法的结构与加密算法的结构相同,从而方便了工程实现。等价解密算法中的变换为加密算法中相应变换的逆变换。 RIJNDEAEL的安全性:RIJNDEAEL算法的安全设计策略是宽轨迹策略WideTrai1Strategy,具有很高的安全性,能有效抵抗自前己知的攻击,如线性攻击、插值攻击、差分攻击和相关密钥攻击等。RIJNDEAEL的数据块长度和密钥长度都可变,因此能够适应不同的安全应用环境。 3、DES算法
实验五数据加密与解密实验(3学时) 一、实验目的 1、了解OPENSSL开放源程序的应用; 2、熟悉用对称加密的方法加密和解密。 3、熟悉利用RSA非对称密钥对文件进行加密与解密的整个过程方法。 二、实验设备及软件环境 (一)实验设备 服务器、交换机和PC机组成NT网络。 (二)软件环境 1.服务器采用Microsoft Windows 2003 Server 操作系统; 2.学生客户端采用Windows XP系统、IE6.0以上浏览器。 3.OPENSSL开放源程序 三、实验内容与步骤(整个实验共分五个部分) (一)准备工作 步骤一下载OPENSSL安装包到C盘根目录下。 (下载地址:https://www.doczj.com/doc/8615409154.html,/openssl.rar) 步骤二在C盘中右击压缩包,使用“解压到openssl\”方式来解压 软件包,在C盘根目录下,自动生成OPENSSL文件夹。 步骤三点击“开始”、“程序”、“附件”、“命令提示符”,打开“命令提示符”窗口。如图8-1。 图8-1 命令提示符
步骤四在“C:\Documents and Settingsowner>”键入cd c:\openssl\out32dll,输入后按回车键,进入到openssl\out32dll的目录下,如图8-2所示。 (命令的含义:打开C盘目录下,openssl文件夹下的out32dll文件夹) 图8-2 openssl\out32dll的目录 (二)对称加密实验步骤 步骤一用记事本创建一个文本文件,文件名为学生的学号(如026h321f.txt),内容为学生的名字和学号,保存在c:\openssl\out32dll的文件夹下,如图9-1所示。 图9-1用记事本创建的文本文件 步骤二输入命令“openssl enc -des3 -in 026h231f.txt -out out026h231f.des”(注意所有的-符号的前面都有一个空格),输入后按回车键,加密过程中会提示你输入保护密码,按回车键后会再输一次密码进行确认,(注:输入密码时屏幕无任何显示)执行结果如图9-2所示。执行完上述命令完后,在c:\openssl\out32dll目录下会自动生成一个用des3算法加密后out026h231f.des的文件。 (命令的含义:使用DES3算法对数据进行对称加密。
填空题 1、密码学的主要任务是实现机密性、鉴别、数据完整性、抗抵赖性。 1、机密性是一种允许特定用户访问和阅读信息,而非授权用户对信息内容不可理解的安全属性。在密码学中,信息的机密性通过加密技术实现。 2、完整性数据完整性即用以确保数据在存储和传输过程中不被非授权修改的的安全属性。密码学可通过采用数据加密、报文鉴别或数字签名等技术来实现数据的完整性保护。 3、鉴别是一种与数据来源和身份鉴别有关的安全服务。鉴别服务包括对身份的鉴别和对数据源的鉴别。对于一次通信,必须确信通信的对端是预期的实体,这就涉及到身份的鉴别。 4、抗抵赖性 是一种用于阻止通信实体抵赖先前的通信行为及相关内容的安全特性。密码学通过对称加密或非对称加密,以及数字签名等技术,并借助可信机构或证书机构的辅助来提供这种服务。 5、密码编码学的主要任务是寻求有效密码算法和协议,以保证信息的机密性或认证性的方法。它主要研究密码算法的构造与设计,也就是密码体制的构造。它是密码理论的基础,也是保密系统设计的基础。 6、密码分析学的主要任务是研究加密信息的破译或认证信息的伪造。它主要是对密码信息的解析方法进行研究。 7、明文(Plaintext)是待伪装或加密的消息(Message)。在通信系统中它可能是比特流,如文本、位图、数字化的语音流或数字化的视频图像等。 8、密文(Ciphertext)是对明文施加某种伪装或变换后的输出,也可认为是不可直接理的字符或比特集,密文常用c表示。 9、加密(Encrypt )是把原始的信息(明文)转换为密文的信息变换过程。 10、解密(Decrypt)是把己加密的信息(密文)恢复成原始信息明文的过程。 11、密码算法(Cryptography Algorithm)也简称密码(Cipher),通常是指加、解密过程所使用的信息变换规则,是用于信息加密和解密的数学函数。对明文进行加密时所采用的规则称作加密算法,而对密文进行解密时所采用的规则称作解密算法。加密算法和解密算法的操作通常都是在一组密钥的控制下进行的。 11、密钥(Secret Key )密码算法中的一个可变参数,通常是一组满足一定条件的随机序列 12、替代密码是指先建立一个替换表,加密时将需要加密的明文依次通过查表,替换为相应的字符,明文字符被逐个替换后,生成无任何意义的字符串,即密文,替代密码的密钥就是其替换表。 13、根据密码算法加解密时使用替换表多少的不同,替代密码又可分为单表替代密码和多
选择题 1、如果发送方用私钥加密消息,则可以实现() A、保密性 B、保密与鉴别 C、保密而非鉴别 D、鉴别 2、在混合加密方式下,真正用来加解密通信过程中所传输数据(明文)的密钥是() A、非对称算法的公钥 B、对称算法的密钥 C、非对称算法的私钥 D、CA中心的公钥 3、以下关于加密说法,不正确的是() A、加密包括对称加密和非对称加密两种 B、信息隐蔽是加密的一种方法 C、如果没有信息加密的密钥,只要知道加密程序的细节就可以对信息进行解密 D、密钥的位数越多,信息的安全性就越高 4、以下关于混合加密方式说法不正确的是:() A、采用公开密钥体制进行通信过程中的加解密处理 B、采用公开密钥体制对对称密钥体制的密钥进行加密后的通信 C、采用对称密钥体制对对称密钥体制的密钥进行加密后的通信 D、采用混合加密方式,利用了对称密钥体制的密钥容易管理和非对称密钥体制的加解密处理速度快的双重优点 5、两个不同的消息摘要具有相同的值时,称为() A、攻击 B、冲突 C、散列 D、都不是
6、()用于验证消息完整性。 A、消息摘要 B、加密算法 C、数字信封 D、都不是 7、HASH函数可应用于()。 A、数字签名 B、生成程序或文档的“数字指纹” C、安全存储口令 D、数据的抗抵赖性 8、数字证书采用公钥体制,每个用户设定一把公钥,由本人公开,用它进行: A、加密和验证签名 B、解密和签名 C、加密 D、解密 9、数字签名为保证其不可更改性,双方约定使用() A、HASH算法 B、RSA算法 C、CAP算法 D、ACR算法 10、1是网络通信中标志通信各方身份信息的一系列数据,提供一种在Internet上验证身份的方式 A、数字认证 B、数字证书 C、电子证书 D、电子认证 11、以下关于CA认证中心说法正确的是
一、选择 1.若一个单向函数存在一个附加信息,当不知道该附加信息时从函数值求原像是困难的,但是知道 该附加信息时从函数求原像是容易的,则该单向函数是 A.陷门单向函数 B.门陷单向函数 C.完全单向函数D容量单向函数 2.标志着公钥密码学诞生的事件是 A. C.Shannon发表的保密系统的通信理论 B.W.Diffle和M.Hellman发表“密码学的新方向”一文 C. C.RSA加密公钥的提出 D.维吉利亚密码体制的提出。 3.下列密码体制中,被认为无条件安全的是 A.一次一密乱码本(one-time pad) B.ElGamal C.RSA D.Cramer-Shop 4.下列密码体制中,不属该分组密码的是 A.IDEA B.AES C.ElGamal D.DES 5.目前通称的AES算法指的是 A.Terpent算法 B.RCG算法 C.Rijndael算法 D.Tuofish算法 二、填空 1.按照一个明文字母是否总是被一个固定的字母代换进行划分,代换密码可分为单表代换密码和 多表代换密码。 2.经典密码学的2个分支:密码编码学和密码分析学。 3.根据攻击者所拥有的信息不同,对数字签名方案的攻击主要有惟密钥攻击,已知消息攻击,选 择消息攻击,适应性选择消息攻击四种常见的类型。 4.分组密码主要有电子密码本模式(ECB) ,密码分组链接模式(CBC) ,密码反馈模式(CFB) , 输出反馈模式(OFB) 。 5.根据密码分析者破译时已具备的条件,把对密码系统的常见攻击分为惟密文攻击,已知明文攻 击,选择明文攻击,选择密文攻击。 三、问答 1.Feistel 密码结构主要部件是哪些?它在迭代运算中起到什么作用? ANS:Feistel密码是通过代替和置换(S-P网络)交替的方式来构造分组密码,其实就是基于混乱和扩散原理实现加解密运算。 S盒变换:它把输入的一个n长的比特串转化为另一个m长的比特串输出。 P盒变换:通过把一个比特串中各比特的位置次序重新排列而得到新的比特串的变换。 2.数字签名的四个特征? ANS:数字签名具有以下特征: (1) 收方能够确认或证实发方的签名,但不能伪造。 (2) 发方发出签名的消息给收方后,就不能再否认他所签发的消息。 (3) 收方对已收到的签名消息不能否认。 (4) 第三者可以确认收发双方之间的消息传送,但不能伪造这一过程。 3.分组密码主要优点是什么?其设计原则应考虑哪些问题? ANS:分组密码的优点是:明文信息良好的扩展性,对插入的敏感性,不需要密钥同步,较强的适用性,适合作为加密标准。在分组密码具体设计中,还需重点考虑的有:S盒的设计、P盒的设计、轮函数F的设计、迭代轮数以及密钥扩展算法等。
流密码和分组密码 按照密钥的特征不同,密码体制分为对称密码体制和非对称密码体制。按照对明文消息加密方式的不同,密码体制分为流密码(Stream Cipher )和分组密码(Block Cipher )[1]。非对称密码体制均为分组密码[2]。 1 流密码 流密码也称为序列密码。在流密码中,明文以序列的方式表示,称为明文流。在对明文流进行加密时,先由种子密钥生成一个密钥流。然后,利用加密算法把明文流和密钥流加密,产生密文流。流密码每次只对明文中的单个bit 位进行加密变换,加密过程所需的密钥流由种子密钥通过密钥流生成器产生。流密码的主要原理是通过随机数发生器产生性能优良的伪随机序列(密钥流),使用该序列加密明文流(逐bit 位加密),得到密文流。由于每一个明文都对应一个随机的加密密钥,因此流密码在理论上属于无条件安全的密码体制(一次一密密码) [3]。流密码的基本加密过程,如图1所示。 图1 流密码的加密过程 设明文流为:12i m m m m = ,密钥流由密钥流发生器f 产生:(,)i i z f k σ=,这里i σ是加密器中的存储器在时刻i 的状态,f 是由种子密钥k 和i σ产生的函数。设最终得到的密钥流为: 12i k k k k = ,加密结果为:121212()()()i i k k k i c c c c E m E m E m == ,解密结果为: 121212()()()i k k k i i m D c D c D c m m m == 。用流密码进行保密通信的模型,如图2所示: 图2 流密码保密通信图 2 分组密码 分组密码也称为块密码。当加密一条长消息(明文)时,首先,将明文编码表示为二进制序列;然后,将其分成若干个固定长度的组(最后一组长度不够时还得进行填充,如补0);
1.简述对称加密算法有哪些优点。 A.对称密码术的优点在于效率高(加/解密速度能达到数十兆/秒或更多) B.算法简单 C.系统开销小 D.适合加密大量数据 2. 结合实验描述一下使用RSA工具加密数据的一般流程。 主机A选择“文件->载入任意待加密文件(字节流)”,指定明文文件hello.txt。主机A 选择“操作->公钥加密载入的字节流”,生成密文文件hello1.hextxt。主机A查看密文文件hello1.hextxt的内容。由此可以分析出:经RSA公钥加密了明文文件hello.txt。 3.常用的加密技术通常都有很多实际的应用,请列举几例。 例如办公文件证书的加密,公司内部文件报表加密,以及一些机关重要文件加密等。 4.通过本实验,请设计一个文件安全传输的方法流程 通过“OUTLOOK EXPRESS”客户端,在系统托盘的PGP图标上单击鼠标,在弹出的快捷菜单上选择“Current Window->Encrypt”菜单项,弹出“PGPtray - Key Selection Dialog”对话框,将接收方的邮件地址拖到“Recipients”列表中,将发件人的邮件地址拖到“Drag users from this list to the Recipients”列表中,单击“OK”按钮,则要发送的邮件内容被加密了。 5. 应用数字签名有哪些好处? 数字签名可以用来验证文档的真实性和完整性,数字签名使用强大的加密技术和公钥基础结构,以更好地保证文档的真实性、完整性和受认可性。该流程非常安全,一些政府已经立法赋予数字签名法律效力。 6.如何防止网络传输的文件遭到非法篡改? 可以利用数字签名技术进行保护: 使用加密系统(对称性与非对称性加密)防止他人篡改或窃取。 以散列方式防止文件完整性遭到破坏。 使用数字签名方式核实发送方的确切身份。 使用数字签名防止发送者否认。 7.数字时间戳服务主要的作用是什么? 对于成功的电子商务应用,要求参与交易各方不能否认其行为。这其中需要在经过数字签名的交易上打上一个可信赖的时间戳,从而解决一系列的实际问题和法律问题。由于用户桌面时间很容易改变,由该时间产生的时间戳不可信赖,因此需要一个权威第三方来提供可信赖的且不可抵赖的时间戳服务。 在各种政务和商务文件中,时间是十分重要的信息。在书面合同中,文件签署的日期和签名一样均是十分重要的防止文件被伪造和篡改的关键性内容。 在电子文件中,同样需对文件的日期和时间信息采取安全措施,而数字时间戳服务(DTS:digital time-stamp service)就能提供电子文件发表时间的安全保护。