现代密码学实验报告

现代密码学实验报告
现代密码学实验报告

现代密码学实验报告

学生姓名

学号

专业班级

指导教师

学院信息科学与工程学院

完成时间2014年5月

实验一对称密码算法实验

[实验目的]

1.掌握密码学中经典的对称密码算法DES、AES、RC4的算法原理。

2.掌握DES、AES、RC4的算法流程和实现方法。

[实验预备]

1.DES算法有什么特点算法中的哪些结构保证了其混淆和扩散的特性

答:分组比较短、密钥太短、密码生命周期短、运算速度较慢。采用替代和置换的方法简单有效地遵循了香农定理,替代操作通过S盒达到了混淆效果,置换操作通过P盒扩散效果。

2.AES算法的基本原理和特点。

答:AES加密数据块分组长度必须为128比特,密钥长度可以是128比特、192比特、256比特中的任意一个(如果数据块及密钥长度不足时,会补齐)。AES加密有很多轮的重复和变换。大致步骤如下:1、密钥扩展(KeyExpansion),2、初始轮(Initial Round),3、重复轮(Rounds),每一轮又包括:SubBytes、ShiftRows、MixColumns、AddRoundKey,4、最终轮(Final Round),最终轮没有MixColumns。

3.流密码RC4的密钥流生成以及S盒初始化过程。

答:RC4由伪随机数生成器和异或运算组成。RC4的密钥长度可变,范围是[1,255]。RC4一个字节一个字节地加解密。给定一个密钥,伪随机数生成器接受密钥并产生一个S盒。S盒用来加密数据,而且在加密过程中S盒会变化。初始化长度为256的S盒。第一个for循环将0到255的互不重复的元素装入S盒。第二个for循环根据密钥打乱S盒。下面i,j是两个指针。每收到一个字节,就进行while循环。通过一定的算法((a),(b))定位S盒中的一个元素,并与输入字节异或,得到k。循环中还改变了S盒((c))。如果输入的是明文,输出的就是密文;如果输入的是密文,输出的就是明文。

[实验内容]

1.分析DES、AES、RC4、SHA的实现过程。

2. 用程序设计语言将算法过程编程实现。

3. 完成字符串数据的加密运算和解密运算

输入明文:Idolikethisbook

输入密钥:cryption

[实验步骤]

1. 预习DES、AES、RC4算法。

2. 写出算法流程,用程序设计语言将算法过程编程实现。

DES算法流程:

代码:

#include ""

#include ""

#include

#include

#include <>

using namespace std;

enum{encrypt,decrypt};

入指定的明文、密钥进行实验,验证结果。

DES运行截图:

AES

文件:

目录:

运行截图:

RC4运行截图:

4.自己选择不同的输入,记录输出结果。DES:

AES:RC4:

写出所编写程序的流程图和运行界面、运行结果。

[问题讨论]

1.在DES算法中有哪些是弱密钥哪些是半弱密钥

答:弱密钥(十六进制编码):

001

FEFEFEFEFEFEFEFE

1F1F1F1F0F0F0E0E

E0E0E0E0F1F1F1F1

半弱密钥:

E01FE01FE01FE01F

FE01FE01FE01FE01

E001E001F101F101

FE1FFE1FFE01FE01。

2.改变明文或密钥中的一个比特值可能影响AES值中的多少比特

答:两个以上的比特。

3.分析实验中在编辑、编译、运行等各环节中所出现的问题及解决方法。

答:DES是分组密码,所以在完成一个一轮的8组加密后,要达到加密可变长度的明文时,必须很好的将算法循环成为一个完美的整体。但这个过程必须选择好输入与输出的方法和存储结构,比如使用string作为存储明文和密文的输出时,要注意到这种引用型的变量在存储时是属于同一片连续存储空间,所以一旦输出则会全部输出。所以必须每一次循环后赋空值达到释放空间的效果,然后用循环控制输出,用函数截取位数,达到控制效果。

AES算法在实现时要注意一个特别重要的地方,因为是给文件加密,所以必须将准备好的txt格式的记事本中放入要加密的明文,然后该文件必须放置在当前程序运行的目录之下,否则将无法加密。

RC4算法较为简单只需注意各处循环的参数指针即可,循环的嵌套以及输入输出与算法的结合,出错后,调整了相关的i,j值及循环位置即完成了。

回答问题

实验二公钥密码算法实验

[实验目的]

1.掌握密码学中常用的公钥密码算法RSA、ECC的算法原理。

2.掌握RSA、ECC的算法流程和实现方法。

[实验预备]

和ECC密码系统所基于的数学难题是什么

和ECC算法的基本原理。

3.公钥密码系统可以取代对称密码系统吗

和ECC的实现过程。

[实验内容]

1. 分析RSA、ECC的实现过程。

2. 用程序设计语言将算法过程编程实现

3. 完成数据的加密运算和解密运算

输入明文:security

输入密钥:cryption

对ASCII码进行加密和解密。

[实验步骤]

1. 预习RSA、ECC算法。

2. 了解大素数的生成、大数的运算、公钥、私钥的生成。

3. 写出算法流程,用程序设计语言将算法过程编程实现。RSA算法流程:

代码:

#include

#include

using namespace std;

int CheckPrime()

{

int n;

double k;

cin >> n;

k = sqrt(n);

int i;

if(n>=2 && n<=10000)

{

for(i=2; i<=k; i++)

{

if(n%i == 0)

return 0;

}

if(i>k)

return n;

}

else

cout << "输入的数字不符合要求,请重新输入!" << endl;

return 0;

}

int CreatePassword(int e,int p,int q,int m) {

int d=1;

int n;

int ou;握身份认证协议的原理和基本思想。

2.掌握SKEY协议的机制和实现方法。

[实验预备]

协议的作用。

协议的安全性分析。

协议的实现过程。

[实验内容]

1. 分析SKEY协议的实现过程。

2. 用程序设计语言将算法过程编程实现。

3. 演示SKEY协议的身份鉴别过程。

[实验步骤]

1.预习SKEY协议的机制。

2.选择和实现相应的摘要算法MD5或SHA。

选择了MD5算法,代码如下:

<>文件:

The following makes PROTOTYPES default to 0 if it has not already

been defined with C compiler flags.

*/

#ifndef PROTOTYPES

#define PROTOTYPES 1

#endif

/* POINTER defines a generic pointer type */

typedef unsigned char *POINTER;

/* UINT2 defines a two byte word */

typedef unsigned short int UINT2;

/* UINT4 defines a four byte word */

typedef unsigned long int UINT4;

/* PROTO_LIST is defined depending on how PROTOTYPES is defined above. If using PROTOTYPES, then PROTO_LIST returns the list, otherwise it returns an empty list.

*/

#if PROTOTYPES

#define PROTO_LIST(list) list

#else

#define PROTO_LIST(list) ()

#endif

#endif

<>文件:

/* - header file for

*/

Created 1991. All

rights reserved.

License to copy and use this software is granted provided that it

is identified as the "RSA Data Security, Inc. MD5 Message-Digest Algorithm" in all material mentioning or referencing this software

or this function.

License is also granted to make and use derivative works provided

that such works are identified as "derived from the RSA Data

Security, Inc. MD5 Message-Digest Algorithm" in all material

mentioning or referencing the derived work.

RSA Data Security, Inc. makes no representations concerning either

the merchantability of this software or the suitability of this

software for any particular purpose. It is provided "as is"

without express or implied warranty of any kind.

These notices must be retained in any copies of any part of this

documentation and/or software.

*/

/* MD5 context. */

#ifndef _MD5CONTEXT_H

#define _MD5CONTEXT_H

#include ""

typedef struct {

UINT4 state[4]; /* state (ABCD) */ UINT4 count[2]; /* number of bits, modulo 2^64 (lsb first) */

unsigned char buffer[64]; /* input buffer */

} MD5_CTX;

#ifdef __cplusplus MD5 message-digest algorithm

*/

/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All

rights reserved.

License to copy and use this software is granted provided that it

is identified as the "RSA Data Security, Inc. MD5 Message-Digest

Algorithm" in all material mentioning or referencing this software

or this function.

License is also granted to make and use derivative works provided

that such works are identified as "derived from the RSA Data

Security, Inc. MD5 Message-Digest Algorithm" in all material

mentioning or referencing the derived work.

RSA Data Security, Inc. makes no representations concerning either

the merchantability of this software or the suitability of this

software for any particular purpose. It is provided "as is"

without express or implied warranty of any kind.

These notices must be retained in any copies of any part of this documentation and/or software.

*/

#include ""

#include ""

/* Constants for MD5Transform routine.

*/

#define S11 7

#define S12 12

#define S13 17

#define S14 22

#define S21 5

#define S22 9

#define S23 14

#define S24 20

#define S31 4

#define S32 11

#define S33 16

#define S34 23

#define S41 6

#define S42 10

#define S43 15

#define S44 21

static void MD5Transform PROTO_LIST ((UINT4 [4],unsigned char [64])); static void Encode PROTO_LIST

((unsigned char *, UINT4 *, unsigned int));

static void Decode PROTO_LIST

((UINT4 *, unsigned char *, unsigned int));

static void MD5_memcpy PROTO_LIST ((POINTER, POINTER, unsigned int)); static void MD5_memset PROTO_LIST ((POINTER, int, unsigned int));

static unsigned char PADDING[64] = {

0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0

};

/* F, G, H and I are basic MD5 functions.

*/

#define F(x, y, z) (((x) & (y)) | ((~x) & (z)))

#define G(x, y, z) (((x) & (z)) | ((y) & (~z)))

#define H(x, y, z) ((x) ^ (y) ^ (z))

#define I(x, y, z) ((y) ^ ((x) | (~z)))

/* ROTATE_LEFT rotates x left n bits.

*/

#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n))))

/* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4.

Rotation is separate from addition to prevent recomputation.

*/

#define FF(a, b, c, d, x, s, ac) { \

(a) += F ((b), (c), (d)) + (x) + (UINT4)(ac); \

(a) = ROTATE_LEFT ((a), (s)); \

(a) += (b); \

}

#define GG(a, b, c, d, x, s, ac) { \

(a) += G ((b), (c), (d)) + (x) + (UINT4)(ac); \

(a) = ROTATE_LEFT ((a), (s)); \

(a) += (b); \

}

#define HH(a, b, c, d, x, s, ac) { \

(a) += H ((b), (c), (d)) + (x) + (UINT4)(ac); \

(a) = ROTATE_LEFT ((a), (s)); \

(a) += (b); \

}

#define II(a, b, c, d, x, s, ac) { \

(a) += I ((b), (c), (d)) + (x) + (UINT4)(ac); \

(a) = ROTATE_LEFT ((a), (s)); \

(a) += (b); \

}

/* MD5 initialization. Begins an MD5 operation, writing a new context.

*/

void MD5Init (context)

MD5_CTX *context; /* context */ {

context->count[0] = context->count[1] = 0;

/* Load magic initialization constants.

*/

context->state[0] = 0x;

context->state[1] = 0xefcdab89;

context->state[2] = 0x98badcfe;

context->state[3] = 0x;

}

/* MD5 block update operation. Continues an MD5 message-digest

operation, processing another message block, and updating the

context.

*/

void MD5Update (context, input, inputLen)

MD5_CTX *context; /* context */

unsigned char *input; /* input block */

unsigned int inputLen; /* length of input block */

{

unsigned int i, index, partLen;

/* Compute number of bytes mod 64 */

index = (unsigned int)((context->count[0] >> 3) & 0x3F);

/* Update number of bits */

if ((context->count[0] += ((UINT4)inputLen << 3))

< ((UINT4)inputLen << 3))

context->count[1]++;

context->count[1] += ((UINT4)inputLen >> 29);

partLen = 64 - index;

/* Transform as many times as possible.

*/

if (inputLen >= partLen) {

MD5_memcpy

((POINTER)&context->buffer[index], (POINTER)input, partLen);

MD5Transform (context->state, context->buffer);

for (i = partLen; i + 63 < inputLen; i += 64)

MD5Transform (context->state, &input[i]);

index = 0;

}

else

i = 0;

/* Buffer remaining input */

MD5_memcpy

((POINTER)&context->buffer[index], (POINTER)&input[i],

inputLen-i);

}

/* MD5 finalization. Ends an MD5 message-digest operation, writing the

the message digest and zeroizing the context.

*/

void MD5Final (digest, context)

unsigned char digest[16]; /* message digest */

MD5_CTX *context; /* context */ {

unsigned char bits[8];

unsigned int index, padLen;

/* Save number of bits */

Encode (bits, context->count, 8);

/* Pad out to 56 mod 64.

*/

index = (unsigned int)((context->count[0] >> 3) & 0x3f);

padLen = (index < 56) (56 - index) : (120 - index);

MD5Update (context, PADDING, padLen);

/* Append length (before padding) */

MD5Update (context, bits, 8);

/* Store state in digest */

Encode (digest, context->state, 16);

/* Zeroize sensitive information.

*/

MD5_memset ((POINTER)context, 0, sizeof (*context));

}

/* MD5 basic transformation. Transforms state based on block.

*/

static void MD5Transform (state, block)

UINT4 state[4];

unsigned char block[64];

{

UINT4 a = state[0], b = state[1], c = state[2], d = state[3], x[16];

Decode (x, block, 64);

/* Round 1 */

FF (a, b, c, d, x[ 0], S11, 0xd76aa478); /* 1 */

FF (d, a, b, c, x[ 1], S12, 0xe8c7b756); /* 2 */

FF (c, d, a, b, x[ 2], S13, 0x242070db); /* 3 */

FF (b, c, d, a, x[ 3], S14, 0xc1bdceee); /* 4 */

FF (a, b, c, d, x[ 4], S11, 0xf57c0faf); /* 5 */

FF (d, a, b, c, x[ 5], S12, 0x4787c62a); /* 6 */

FF (c, d, a, b, x[ 6], S13, 0xa8304613); /* 7 */

FF (b, c, d, a, x[ 7], S14, 0xfd469501); /* 8 */

FF (d, a, b, c, x[ 9], S12, 0x8b44f7af); /* 10 */ FF (c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */ FF (b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */ FF (a, b, c, d, x[12], S11, 0x6b901122); /* 13 */ FF (d, a, b, c, x[13], S12, 0xfd987193); /* 14 */ FF (c, d, a, b, x[14], S13, 0xa679438e); /* 15 */ FF (b, c, d, a, x[15], S14, 0x49b40821); /* 16 */

/* Round 2 */

GG (a, b, c, d, x[ 1], S21, 0xf61e2562); /* 17 */ GG (d, a, b, c, x[ 6], S22, 0xc040b340); /* 18 */ GG (c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */ GG (b, c, d, a, x[ 0], S24, 0xe9b6c7aa); /* 20 */ GG (a, b, c, d, x[ 5], S21, 0xd62f105d); /* 21 */ GG (d, a, b, c, x[10], S22, 0x2441453); /* 22 */ GG (c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */ GG (b, c, d, a, x[ 4], S24, 0xe7d3fbc8); /* 24 */ GG (a, b, c, d, x[ 9], S21, 0x21e1cde6); /* 25 */ GG (d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */ GG (c, d, a, b, x[ 3], S23, 0xf4d50d87); /* 27 */

GG (b, c, d, a, x[ 8], S24, 0x455a14ed); /* 28 */ GG (a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */ GG (d, a, b, c, x[ 2], S22, 0xfcefa3f8); /* 30 */ GG (c, d, a, b, x[ 7], S23, 0x676f02d9); /* 31 */ GG (b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */

/* Round 3 */

HH (a, b, c, d, x[ 5], S31, 0xfffa3942); /* 33 */ HH (d, a, b, c, x[ 8], S32, 0x8771f681); /* 34 */ HH (c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */ HH (b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */ HH (a, b, c, d, x[ 1], S31, 0xa4beea44); /* 37 */ HH (d, a, b, c, x[ 4], S32, 0x4bdecfa9); /* 38 */ HH (c, d, a, b, x[ 7], S33, 0xf6bb4b60); /* 39 */ HH (b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */ HH (a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */ HH (d, a, b, c, x[ 0], S32, 0xeaa127fa); /* 42 */ HH (c, d, a, b, x[ 3], S33, 0xd4ef3085); /* 43 */ HH (b, c, d, a, x[ 6], S34, 0x4881d05); /* 44 */ HH (a, b, c, d, x[ 9], S31, 0xd9d4d039); /* 45 */ HH (d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */ HH (c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */

/* Round 4 */

II (a, b, c, d, x[ 0], S41, 0xf4292244); /* 49 */

II (d, a, b, c, x[ 7], S42, 0x432aff97); /* 50 */

II (c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */

II (b, c, d, a, x[ 5], S44, 0xfc93a039); /* 52 */

II (a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */

II (d, a, b, c, x[ 3], S42, 0x8f0ccc92); /* 54 */

II (c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */

II (b, c, d, a, x[ 1], S44, 0x85845dd1); /* 56 */

II (a, b, c, d, x[ 8], S41, 0x6fa87e4f); /* 57 */

II (d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */

II (c, d, a, b, x[ 6], S43, 0xa3014314); /* 59 */

II (b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */

II (a, b, c, d, x[ 4], S41, 0xf7537e82); /* 61 */

II (d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */

II (c, d, a, b, x[ 2], S43, 0x2ad7d2bb); /* 63 */

II (b, c, d, a, x[ 9], S44, 0xeb86d391); /* 64 */

state[0] += a;

state[1] += b;

state[2] += c;

state[3] += d;

/* Zeroize sensitive information.

*/

MD5_memset ((POINTER)x, 0, sizeof (x));

}

/* Encodes input (UINT4) into output (unsigned char). Assumes len is a multiple of 4.

*/

static void Encode (output, input, len)

unsigned char *output;

UINT4 *input;

unsigned int len;

{

unsigned int i, j;

for (i = 0, j = 0; j < len; i++, j += 4) {

output[j] = (unsigned char)(input[i] & 0xff);

output[j+1] = (unsigned char)((input[i] >> 8) & 0xff);

output[j+2] = (unsigned char)((input[i] >> 16) & 0xff);

output[j+3] = (unsigned char)((input[i] >> 24) & 0xff);

}

}

/* Decodes input (unsigned char) into output (UINT4). Assumes len is a multiple of 4.

*/

static void Decode (output, input, len)

UINT4 *output;

unsigned char *input;

unsigned int len;

{

unsigned int i, j;

for (i = 0, j = 0; j < len; i++, j += 4)

output[i] = ((UINT4)input[j]) | (((UINT4)input[j+1]) << 8) |

(((UINT4)input[j+2]) << 16) | (((UINT4)input[j+3]) << 24);

}

/* Note: Replace "for loop" with standard memcpy if possible.

*/

static void MD5_memcpy (output, input, len)

POINTER output;

POINTER input;

unsigned int len;

{

unsigned int i;

for (i = 0; i < len; i++)

output[i] = input[i];

}

/* Note: Replace "for loop" with standard memset if possible.

*/

static void MD5_memset (output, value, len)

POINTER output;

int value;

unsigned int len;

{

unsigned int i;

for (i = 0; i < len; i++)

((char *)output)[i] = (char)value;

}

<>文件:

It is provided "as is"

If casting away the const-ness worries you,

m_digestString[32]=0;

m_digestValid = calcDigest();

}

If casting away the const-ness of plainText

m_plainText = const_cast(plainText);

m_digestValid = calcDigest();

}

/* Use a function of this type with your favorite string class

if casting away the const-ness of the user's text buffer violates you

coding standards.

void CMD5::setPlainText(CString& strPlainText)

{

static CString plaintext(strPlainText);

m_plainText = ();

m_digestValid = calcDigest();

}

*/

const char* CMD5::getMD5Digest()

{

It calculates a cryptological hash value, called a "digest" from a character

string. For every unique character string the MD5 hash is guaranteed to be

unique. The MD5 hash has the property that given the digest, it's

thought to be impossible to get back to the plain text string with existing

technology. In this implementation the digest is always a 32 digit hex number,

regardless of the length of the input plaintext.

This class is helpful for programs which store passwords. Rather than storing

the password directly, the programmer should store the MD5 digest of the password.

Then when the user enters a password, compute the MD5 digest of the input password.

If it is identical to the stored digest, then the user

has entered the correct password. It doesn't matter if an evil person sees the

现代密码学实验报告

现代密码学 实验报告 学生姓名 学号 专业班级计算机科学与技术指导教师段桂华 学院信息科学与工程学院完成时间2016年4月

实验一密码算法实验 [实验目的] 1.掌握密码学中经典的对称密码算法AES、RC4的算法原理。 2.掌握AES、RC4的算法流程和实现方法。 [实验预备] 1.AES算法的基本原理和特点。 2.流密码RC4的密钥流生成以及S盒初始化过程。 [实验内容] 1. 分析AES、RC4的实现过程。 2. 用程序设计语言将算法过程编程实现。 3. 完成字符串数据的加密运算和解密运算 输入十六进制明文:11223344556677889900AABBCCDDEEFF 输入十六进制密钥:13579BDF02468ACE1234567890ABCDEF [实验步骤] 1. 预习AES、RC4算法。 2. 写出算法流程,用程序设计语言将算法过程编程实现。 3. 输入指定的明文、密钥进行实验,验证结果。 4. 自己选择不同的输入,记录输出结果。 写出所编写程序的流程图和运行界面、运行结果。 一、AES算法 1、AES算法简介 AES 是一种可用来保护电子数据的新型加密算法。特别是,AES 是可以使用128、192 和 256 位密钥的迭代式对称密钥块密码,并且可以对 128 位(16 个字节)的数据块进行加密和解密。与使用密钥对的公钥密码不同的是,对称密钥密码使用同一个密钥来对数据进行加密和解密。由块密码返回的加密数据与输入数据具有相同的位数。迭代式密码使用循环结构来针对输入数据反复执行排列和置换运算。 2、算法实现及流程 以加密函数为例,如下所示,首先对密钥进行预处理密钥扩展,然后明文进行Nr(Nr与密钥长度有关)次迭代运算,包括字节替换SubBytes、移位行运算ShiftRows、混合列运算MixColumns、以及轮秘钥加密AddRoundKey。

(完整版)北邮版《现代密码学》习题答案.doc

《现代密码学习题》答案 第一章 1、1949 年,( A )发表题为《保密系统的通信理论》的文章,为密码系统建立了理 论基础,从此密码学成了一门科学。 A、Shannon B 、Diffie C、Hellman D 、Shamir 2、一个密码系统至少由明文、密文、加密算法、解密算法和密钥 5 部分组成,而其安全性是由( D)决定的。 A、加密算法 B、解密算法 C、加解密算法 D、密钥 3、计算和估计出破译密码系统的计算量下限,利用已有的最好方法破译它的所需要 的代价超出了破译者的破译能力(如时间、空间、资金等资源),那么该密码系统的安全性是( B )。 A 无条件安全 B计算安全 C可证明安全 D实际安全 4、根据密码分析者所掌握的分析资料的不通,密码分析一般可分为 4 类:唯密文攻击、已知明文攻击、选择明文攻击、选择密文攻击,其中破译难度最大的是( D )。 A、唯密文攻击 B 、已知明文攻击 C 、选择明文攻击D、选择密文攻击 5、1976 年,和在密码学的新方向一文中提出了公开密钥密码的思想, 从而开创了现代密码学的新领域。 6、密码学的发展过程中,两个质的飞跃分别指1949年香农发表的保密系统的通

信理论和公钥密码思想。 7、密码学是研究信息寄信息系统安全的科学,密码学又分为密码编码学和密码分析学。 8、一个保密系统一般是明文、密文、密钥、加密算法、解密算法5部分组成的。 对9、密码体制是指实现加密和解密功能的密码方案,从使用密钥策略上,可分为 称和非对称。 10、对称密码体制又称为秘密密钥密码体制,它包括分组密码和序列密码。 第二章 1、字母频率分析法对( B )算法最有效。 A、置换密码 B 、单表代换密码C、多表代换密码D、序列密码 2、(D)算法抵抗频率分析攻击能力最强,而对已知明文攻击最弱。 A 仿射密码 B维吉利亚密码C轮转密码 D希尔密码 3、重合指数法对( C)算法的破解最有效。 A 置换密码 B单表代换密码C多表代换密码 D序列密码 4、维吉利亚密码是古典密码体制比较有代表性的一种密码,其密码体制采用的是 (C )。

杭电密码学DES密码实验报告

课程实验报告 课程密码学实验 学院通信工程学院 专业信息安全 班级14083611 学号14084125 学生姓名刘博 实验名称DES密码实验 授课教师胡丽琴

DES密码实验 一、实验要求: 1、了解分组密码的起源与涵义。 2、掌握DES密码的加解密原理。 3、用Visual C++实现DES密码程序并输出结果。 二、实验内容: 1、1949年,Shannon发表了《保密系统的通信理论》,奠定了现代密码学的基础。他还指出混淆和扩散是设计密码体制的两种基本方法。扩散指的是让明文中的每一位影响密文中的许多位,混淆指的是将密文与密钥之间的统计关系变得尽可能复杂。而分组密码的设计基础正是扩散和混淆。在分组密码中,明文序列被分成长度为n的元组,每组分别在密钥的控制下经过一系列复杂的变换,生成长度也是n的密文元组,再通过一定的方式连接成密文序列。 2、DES是美国联邦信息处理标准(FIPS)于1977年公开的分组密码算法,它的设计基于Feistel对称网络以及精心设计的S盒,在提出前已经进行了大量的密码分析,足以保证在当时计算条件下的安全性。不过,随着计算能力的飞速发展,现如今DES已经能用密钥穷举方式破解。虽然现在主流的分组密码是AES,但DES的设计原理仍有重要参考价值。在本实验中,为简便起见,就限定DES 密码的明文、密文、密钥均为64bit,具体描述如下: 明文m是64bit序列。 初始密钥K是64 bit序列(含8个奇偶校验bit)。 子密钥K1, K2…K16均是48 bit序列。 轮变换函数f(A,J):输入A(32 bit序列), J(48 bit序列),输出32 bit序列。 密文c是64 bit序列。 1)子密钥生成: 输入初始密钥,生成16轮子密钥K1, K2 (16) 初始密钥(64bit)经过置换PC-1,去掉了8个奇偶校验位,留下56 bit,接着分成两个28 bit的分组C0与D0,再分别经过一个循环左移函数LS1,得到C1与D1,连成56 bit数据,然后经过置换PC-2,输出子密钥K1,以此类推产生K2至K16。

现代密码学期终考试试卷和答案

一.选择题 1、关于密码学的讨论中,下列(D )观点是不正确的。 A、密码学是研究与信息安全相关的方面如机密性、完整性、实体鉴别、抗否认等的综 合技术 B、密码学的两大分支是密码编码学和密码分析学 C、密码并不是提供安全的单一的手段,而是一组技术 D、密码学中存在一次一密的密码体制,它是绝对安全的 2、在以下古典密码体制中,属于置换密码的是(B)。 A、移位密码 B、倒序密码 C、仿射密码 D、PlayFair密码 3、一个完整的密码体制,不包括以下(?C?? )要素。 A、明文空间 B、密文空间 C、数字签名 D、密钥空间 4、关于DES算法,除了(C )以外,下列描述DES算法子密钥产生过程是正确的。 A、首先将DES 算法所接受的输入密钥K(64 位),去除奇偶校验位,得到56位密钥(即经过PC-1置换,得到56位密钥) B、在计算第i轮迭代所需的子密钥时,首先进行循环左移,循环左移的位数取决于i的值,这些经过循环移位的值作为下一次 循环左移的输入 C、在计算第i轮迭代所需的子密钥时,首先进行循环左移,每轮循环左移的位数都相同,这些经过循环移位的值作为下一次循 环左移的输入 D、然后将每轮循环移位后的值经PC-2置换,所得到的置换结果即为第i轮所需的子密钥Ki 5、2000年10月2日,NIST正式宣布将(B )候选算法作为高级数据加密标准,该算法是由两位比利时密码学者提出的。 A、MARS B、Rijndael C、Twofish D、Bluefish *6、根据所依据的数学难题,除了(A )以外,公钥密码体制可以分为以下几类。 A、模幂运算问题 B、大整数因子分解问题 C、离散对数问题 D、椭圆曲线离散对数问题 7、密码学中的杂凑函数(Hash函数)按照是否使用密钥分为两大类:带密钥的杂凑函数和不带密钥的杂凑函数,下面(C )是带密钥的杂凑函数。 A、MD4 B、SHA-1

现代密码学 学习心得

混合离散对数及安全认证 摘要:近二十年来,电子认证成为一个重要的研究领域。其第一个应用就是对数字文档进行数字签名,其后Chaum希望利用银行认证和用户的匿名性这一性质产生电子货币,于是他提出盲签名的概念。 对于所有的这些问题以及其他的在线认证,零知识证明理论成为一个非常强有力的工具。虽然其具有很高的安全性,却导致高负荷运算。最近发现信息不可分辨性是一个可以兼顾安全和效率的性质。 本文研究混合系数的离散对数问题,也即信息不可识别性。我们提供一种新的认证,这种认证比因式分解有更好的安全性,而且从证明者角度看来有更高的效率。我们也降低了对Schnorr方案变形的实际安全参数的Girault的证明的花销。最后,基于信息不可识别性,我们得到一个安全性与因式分解相同的盲签名。 1.概述 在密码学中,可证明为安全的方案是一直以来都在追求的一个重要目标。然而,效率一直就是一个难以实现的属性。即使在现在对于认证已经进行了广泛的研究,还是很少有方案能兼顾效率和安全性。其原因就是零知识协议的广泛应用。 身份识别:关于识别方案的第一篇理论性的论文就是关于零知识的,零知识理论使得不用泄漏关于消息的任何信息,就可以证明自己知道这个消息。然而这样一种能够抵抗主动攻击的属性,通常需要许多次迭代来得到较高的安全性,从而使得协议或者在计算方面,或者在通信量方面或者在两个方面效率都十分低下。最近,poupard和stern提出了一个比较高效的方案,其安全性等价于离散对数问题。然而,其约减的代价太高,使得其不适用于现实中的问题。 几年以前,fiege和shamir就定义了比零知识更弱的属性,即“信息隐藏”和“信息不可分辨”属性,它们对于安全的识别协议来说已经够用了。说它们比零知识更弱是指它们可能会泄漏秘密消息的某些信息,但是还不足以找到消息。具体一点来说,对于“信息隐藏”属性,如果一个攻击者能够通过一个一次主动攻击发现秘密消息,她不是通过与证明者的交互来发现它的。而对于“信息不可分辨”属性,则意味着在攻击者方面看来,证据所用的私钥是不受约束的。也就是说有许多的私钥对应于一个公钥,证据仅仅传递了有这样一个私钥被使用了这样一个信息,但是用的是哪个私钥,并没有在证据传递的信息中出现。下面,我们集中考虑后一种属性,它能够提供一种三次传递识别方案并且对抗主动攻击。Okamoto 描述了一些schnorr和guillou-quisquater识别方案的变种,是基于RSA假设和离散对数子群中的素数阶的。 随机oracle模型:最近几年,随机oracle模型极大的推动了研究的发展,它能够用来证明高效方案的安全性,为设计者提供了一个有价值的工具。这个模型中理想化了一些具体的密码学模型,例如哈希函数被假设为真正的随机函数,有助于给某些加密方案和数字签名等提供安全性的证据。尽管在最近的报告中对于随机oracle模型采取了谨慎的态度,但是它仍然被普遍认为非常的有效被广泛的应用着。例如,在这个模型中被证明安全的OAPE加密

现代密码学考试重点总结 (1)

古典密码 1.密码的基本概念 ○1作为数学的一个分支,是密码编码学和密码分析学的统称 ○2密码编码学:使消息保密的技术和科学 研究内容:1、序列密码算法的编码技术 2、分组密码算法的编码技术 3、公钥密码体制的编码技术 ○3密码分析学:破译密文的科学和技术 研究内容:1、密码算法的安全性分析和破译的理论、方法、技术和实践 2、密码协议的安全性分析的理论与方法 3、安全保密系统的安全性分析和攻击的理论、方法、技术和实践2.密码体制的5构成要素: ○1M:明文消息空间,表示所有可能的明文组成的有限集。 ○2C:密文消息空间,表示所有可能的密文组成的有限集。 ○3K:密钥空间,表示所有可能的密钥组成的有限集。 ○4E:加密算法集合。 ○5D:解密算法集合 3.密码体制的分类: ○1对称密匙密码系统加密密钥=解密密钥钥匙是保密的依赖密钥选择 ○2非对称密匙密码系统加密密钥≠解密密钥 加密密钥为公钥(Public Key)解密密钥为私钥(Private Key) 4.古典密码体制的算法 ○1棋盘密码希腊作家Polybius提出密钥空间:25 ○2移位密码 ○3代换密码 ○4维吉尼亚密码 ○5仿射密码:仿射密码是移位密码的一个推广,其加密过程中不仅包含移位操作,而且使用了乘法运算 例题: 1-1mod26=1 3-1mod26=9 5- 1mod26=21 7-1mod26=15 11-1mod26=19 17-1mod26=23 25- 1mod26=25 ○6置换密码 ○7Hill密码 例题: 5.密码分析的Kerckhoffs原 则:攻击者知道所用的加密算法的内部机理,不知道的仅仅是加密算法所采用的加密密钥 6.常用的密码分析攻击分为以下四类:

密码学级考卷A卷 答案

试题 2015 年~ 2016 年第1 学期 课程名称:密码学专业年级: 2013级信息安全 考生学号:考生姓名: 试卷类型: A卷■ B卷□考试方式: 开卷□闭卷■……………………………………………………………………………………………………… 一. 选择题(每题2分,共20分) 1.凯撒密码是有记录以来最为古老的一种对称加密体制,其加密算法的定义为, 任意,,那么使用凯撒密码加密SECRET的结果是什么()。 A. UGETGV B. WIGVIX C. VHFUHW D. XIVGIW 2.在一下密码系统的攻击方法中,哪一种方法的实施难度最高的()。 A. 唯密文攻击 B. 已知明文攻击 C. 选择明文攻击 D. 选择文本攻击 3.仿射密码顺利进行加解密的关键在于保证仿射函数是一个单射函数,即对于 任意的同余方程有唯一解,那么仿射密码的密钥空间大小是()。(表示中所有与m互素的数的个数) A. B. C. D. 4.为了保证分组密码算法的安全性,以下哪一点不是对密码算法的安全性要求

()。 A. 分组长度足够长 B. 由密钥确定置换的算法要足够复杂 C. 差错传播尽可能地小 D. 密钥量足够大 5.以下哪一种分组密码工作模式等价于同步序列密码()。 A. 电码本模式(ECB模式) B. 密码分组链接模式(CBC模式) C. 输出反馈模式(OFB模式) D. 密码反馈模式(CFB模式) 6.以下对自同步序列密码特性的描述,哪一点不正确()。 A.自同步性 B.无错误传播性 C.抗主动攻击性 D.明文统计扩散性 7.如下图所示的线性移位寄存器,初始值为,请问以下哪 一个选项是正确的输出序列()。 A. B. C. D. 8.以下关于消息认证码的描述,哪一点不正确()。 A.在不知道密钥的情况下,难以找到两个不同的消息具有相同的输出 B.消息认证码可以用于验证消息的发送者的身份 C.消息认证码可以用于验证信息的完整性 D.消息认证码可以用于加密消息 9.以下哪些攻击行为不属于主动攻击()。 A.偷听信道上传输的消息

现代密码学考试总结

密码主要功能: 1.机密性:指保证信息不泄露给非授权的用户或实体,确保存储的信息和传输的信息仅能 被授权的各方得到,而非授权用户即使得到信息也无法知晓信息容,不能使用。 2.完整性:是指信息未经授权不能进行改变的特征,维护信息的一致性,即信息在生成、 传输、存储和使用过程中不应发生人为或非人为的非授权篡改(插入、替换、删除、重排序等),如果发生,能够及时发现。 3.认证性:是指确保一个信息的来源或源本身被正确地标识,同时确保该标识的真实性, 分为实体认证和消息认证。 消息认证:向接收方保证消息确实来自于它所宣称的源; 实体认证:参与信息处理的实体是可信的,即每个实体的确是它所宣称的那个实体,使得任何其它实体不能假冒这个实体。 4.不可否认性:是防止发送方或接收方抵赖所传输的信息,要求无论发送方还是接收方都 不能抵赖所进行的行为。因此,当发送一个信息时,接收方能证实该信息的确是由所宣称的发送方发来的;当接收方收到一个信息时,发送方能够证实该信息的确送到了指定的接收方。 信息安全:指信息网络的硬件、软件及其系统中的数据受到保护,不受偶然的或者恶意的原因而遭到破坏、更改、泄露、否认等,系统连续可靠正常地运行,信息服务不中断。 信息安全的理论基础是密码学,根本解决,密码学理论 对称密码技术——分组密码和序列密码——机密性; 消息认证码——完整性,认证性; 数字签名技术——完整性,认证性,不可否认性; 1949年Shannon发表题为《保密系统的通信理论》 1976年后,美国数据加密标准(DES)的公布使密码学的研究公开,密码学得到了迅速发展。1976年,Diffe和Hellman发表了《密码学的新方向》,提出了一种新的密码设计思想,从而开创了公钥密码学的新纪元。 置换密码 置换密码的特点是保持明文的所有字符不变,只是利用置换打乱了明文字符的位置和次序。列置换密码和周期置换密码 使用密码设备必备四要素:安全、性能、成本、方便。 密码体制的基本要求: 1.密码体制既易于实现又便于使用,主要是指加密函数和解密函数都可以高效地计算。 2.密码体制的安全性是依赖密钥的安全性,密码算法是公开的。 3.密码算法安全强度高,也就是说,密码分析者除了穷举搜索攻击外再找不到更好的攻击 方法。 4.密钥空间应足够大,使得试图通过穷举密钥空间进行搜索的方式在计算上不可行。 密码算法公开的意义: 有利于增强密码算法的安全性;

06计算机密码学试卷A

计算机密码学试卷A 学号:姓名:成绩: 班级:计算机科学与技术(信息安全)031预科、031、032班 一、选择与填空:(24分,每题2分) 1、5 mod 13的乘法逆元是:,负元是:。 2、从信息论的角度看,要提高密码的保密性,应该通过两个途径,一是通过:,二是。 3、DES密码有次迭代,它的加/解密算法仅不同。 4、有限状态自动机在流密码中的作用是:。 5、两密钥三DES加密算法中的加密可以表示为:。 6、强单向杂凑函数是指:。 7、在密钥的生成、分配、管理中KDC叫,它的作用是: 。 8、设已知乘数密码明文字母 J(9)对应于密文字母 P(15),即 9k mod 26 = 15, 密钥 k是:。 9、AES算法如果密钥为192位,则种子密钥阵列为:字节的阵列。 10、对一个分组,SHA要经过轮,步运算。 11、选择明文攻击的前提是:。 12、在认证协议中,时间戳的作用是为了防止攻击。 二、简答:(20分,每题5分) 1、简述CA机构为客户颁发公钥证书的过程,X.509公钥证书中主要包含了哪些项目。

2、简述DSS数字签名标准。 3、简述分组密码的密码反馈模式的工作原理,如果按照16bit反馈,使用DES工作 于密码反馈模式,这时如果某分组的密文中出现了1bit的错误,则此错误在怎样的情况下会影响以后分组的正确性?最多会影响几个分组? 4、怎么样去找一个大素数?素性检测的原理和作用是什么? 三、计算与证明:(56分) 1、用RSA加密:p=7,q=17,e=13,M=10。(4分)

2、求: 11的所有本原根(6分)。 3、用费尔玛和欧拉定理求:6208 mod 11 (4分) (1,3)表示y≡x3+x+3 mod 11 求: 4、椭圆曲线E 11 =3,计算其公钥。(4分) ①曲线上所有的点。(5分)②生成元G(1,4),私钥n A ③若明文为Pm = (4,7),k取2,计算密文Cm。(4分) x≡ 2 mod 3 4、求同余方程组:x≡ 4 mod 5 (5分) x≡ 6 mod 7

现代密码学教程课后部分答案考试比用

第一章 1、1949年,(A )发表题为《保密系统的通信理论》的文章,为密码系统建立了理论基础,从此密码学成了一门科学。 A、Shannon B、Diffie C、Hellman D、Shamir 2、一个密码系统至少由明文、密文、加密算法、解密算法和密钥5部分组成,而其安全性是由(D)决定的。 A、加密算法 B、解密算法 C、加解密算法 D、密钥 3、计算和估计出破译密码系统的计算量下限,利用已有的最好方法破译它的所需要的代价超出了破译者的破译能力(如时间、空间、资金等资源),那么该密码系统的安全性是(B )。 A无条件安全B计算安全C可证明安全D实际安全 4、根据密码分析者所掌握的分析资料的不同,密码分析一般可分为4类:唯密文攻击、已知明文攻击、选择明文攻击、选择密文攻击,其中破译难度最大的是(D )。 A、唯密文攻击 B、已知明文攻击 C、选择明文攻击 D、选择密文攻击 5、1976年,W.Diffie和M.Hellman在密码学的新方向一文中提出了公开密钥密码的思想,从而开创了现代密码学的新领域。 6、密码学的发展过程中,两个质的飞跃分别指1949年香农发表的保密系统的通信理论和公钥密码思想。 7、密码学是研究信息及信息系统安全的科学,密码学又分为密码编码学和密码分析学。 8、一个保密系统一般是明文、密文、密钥、加密算法、解密算法5部分组成的。 9、密码体制是指实现加密和解密功能的密码方案,从使用密钥策略上,可分为对称和非对称。 10、对称密码体制又称为秘密密钥密码体制,它包括分组密码和序列密码。 第二章 1、字母频率分析法对(B )算法最有效。 A、置换密码 B、单表代换密码 C、多表代换密码 D、序列密码 2、(D)算法抵抗频率分析攻击能力最强,而对已知明文攻击最弱。 A仿射密码B维吉利亚密码C轮转密码D希尔密码 3、重合指数法对(C)算法的破解最有效。 A置换密码B单表代换密码C多表代换密码D序列密码 4、维吉利亚密码是古典密码体制比较有代表性的一种密码,其密码体制采用的是(C )。 A置换密码B单表代换密码C多表代换密码D序列密码 5、在1949年香农发表《保密系统的通信理论》之前,密码学算法主要通过字符间的简单置换和代换实现,一般认为这些密码体制属于传统密码学范畴。 6、传统密码体制主要有两种,分别是指置换密码和代换密码。 7、置换密码又叫换位密码,最常见的置换密码有列置换和周期转置换密码。 8、代换是传统密码体制中最基本的处理技巧,按照一个明文字母是否总是被一个固定的字母代替进行划分,代换密码主要分为两类:单表代换和多表代换密码。 9、一个有6个转轮密码机是一个周期长度为26 的6次方的多表代替密码机械装置。 第四章 1、在( C )年,美国国家标准局把IBM的Tuchman-Meyer方案确定数据加密标准,即DES。 A、1949 B、1972 C、1977 D、2001 2、密码学历史上第一个广泛应用于商用数据保密的密码算法是(B )。 A、AES B、DES C、IDEA D、RC6 3、在DES算法中,如果给定初始密钥K,经子密钥产生的各个子密钥都相同,则称该密钥K为弱密钥,DES算法弱密钥的个数为(B )。 A、2 B、4 C、8 D、16

密码学期末考试复习

填空题 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、替代密码是指先建立一个替换表,加密时将需要加密的明文依次通过查表,替换为相应的字符,明文字符被逐个替换后,生成无任何意义的字符串,即密文,替代密码的密钥就是其替换表。

现代密码学考试总结

现代密码学考试总结 https://www.360docs.net/doc/8214101956.html,work Information Technology Company.2020YEAR

密码主要功能: 1.机密性:指保证信息不泄露给非授权的用户或实体,确保存储的信息和传输的信息仅 能被授权的各方得到,而非授权用户即使得到信息也无法知晓信息内容,不能使用。 2.完整性:是指信息未经授权不能进行改变的特征,维护信息的一致性,即信息在生 成、传输、存储和使用过程中不应发生人为或非人为的非授权篡改(插入、替换、删除、重排序等),如果发生,能够及时发现。 3.认证性:是指确保一个信息的来源或源本身被正确地标识,同时确保该标识的真实 性,分为实体认证和消息认证。 消息认证:向接收方保证消息确实来自于它所宣称的源; 实体认证:参与信息处理的实体是可信的,即每个实体的确是它所宣称的那个实体,使得任何其它实体不能假冒这个实体。 4.不可否认性:是防止发送方或接收方抵赖所传输的信息,要求无论发送方还是接收方 都不能抵赖所进行的行为。因此,当发送一个信息时,接收方能证实该信息的确是由所宣称的发送方发来的;当接收方收到一个信息时,发送方能够证实该信息的确送到了指定的接收方。 信息安全:指信息网络的硬件、软件及其系统中的数据受到保护,不受偶然的或者恶意的原因而遭到破坏、更改、泄露、否认等,系统连续可靠正常地运行,信息服务不中断。 信息安全的理论基础是密码学,根本解决,密码学理论 对称密码技术——分组密码和序列密码——机密性; 消息认证码——完整性,认证性; 数字签名技术——完整性,认证性,不可否认性; 1949年Shannon发表题为《保密系统的通信理论》 1976年后,美国数据加密标准(DES)的公布使密码学的研究公开,密码学得到了迅速发展。 1976年,Diffe和Hellman发表了《密码学的新方向》,提出了一种新的密码设计思想,从而开创了公钥密码学的新纪元。 置换密码 置换密码的特点是保持明文的所有字符不变,只是利用置换打乱了明文字符的位置和次序。 列置换密码和周期置换密码 使用密码设备必备四要素:安全、性能、成本、方便。 密码体制的基本要求: 1.密码体制既易于实现又便于使用,主要是指加密函数和解密函数都可以高效地计算。 2.密码体制的安全性是依赖密钥的安全性,密码算法是公开的。 3.密码算法安全强度高,也就是说,密码分析者除了穷举搜索攻击外再找不到更好的攻 击方法。 4.密钥空间应足够大,使得试图通过穷举密钥空间进行搜索的方式在计算上不可行。

现代密码学-RC4校验 实验报告

现代密码学 实 验 报 告 院系:理学院 班级:信安二班 姓名: 学号:

前言 密码学(Cryptology)是研究秘密通信的原理和破译秘密信息的方法的一门学科。密码学的基本技术就是对数据进行一组可逆的数学变换,使未授权者不能理解它的真实含义。密码学包括密码编码学(Cryptography)和密码分析学(Cryptanalyst)两个既对立又统一的主要分支学科。研究密码变化的规律并用之于编制密码以保护信息安全的科学,称为密码编码学。研究密码变化的规律并用之于密码以获取信息情报的科学,称为密码分析学,也叫密码破译学。 密码学在信息安全中占有非常重要的地位,能够为信息安全提供关键理论与技术。密码学是一门古老而深奥的学问,按其发展进程,经历了古典密码和现代密码学两个阶段。现代密码学(Modern Cryptology)通常被归类为理论数学的一个分支学科,主要以可靠的数学方法和理论为基础,为保证信息的机密性、完整性、可认证性、可控性、不可抵赖性等提供关键理论与技术。

RC4密码算法算法实现 实验目的: 理解流密码的概念及相关结构; 理解并能够编写基本的流密码体制; 熟练应用C/C++编程实现RC4密码算法体制。 实验内容: 编程实现RC4加/解密算法。 实验原理: RC4算法是一种序列密码体制或称流密码体制,其加密密钥和解密密钥相同RC4的 密钥长度可变,但为了确保哪去安全强度,目前RC4至少使用128位的密钥。 用1~256个字节(8~2048位)的可变长度密钥初始化一个256个字节的状态向量S,S的元素记为S[0],S[1],…,S[255],从始至终置换后的S包含从0到255的所有8位数。对于加密和解密,字节K是从S的255个元素中按一种系统化的方式选出的一个元素生成的。每生成一个K的值,S中的元素个体就被重新置换一次。 实验代码: Encrypt.h文件: #ifndef _ENCRYPT_RC4_ #define _ENCRYPT_RC4_ #include

现代密码学小论文

目录 现代密码学的认识与应用 (1) 一、密码学的发展历程 (1) 二、应用场景 (1) 2.1 Hash函数 (1) 2.2应用场景分析 (2) 2.2.1 Base64 (2) 2.2.2 加“盐” (2) 2.2.3 MD5加密 (2) 2.3参照改进 (3) 2.3.1 MD5+“盐” (3) 2.3.2 MD5+HMAC (3) 2.3.3 MD5 +HMAC+“盐” (3) 三、总结 (4)

现代密码学的认识与应用 一、密码学的发展历程 密码学的起源的确要追溯到人类刚刚出现,并且尝试去学习如何通信的时候,为了确保他们的通信的机密,最先是有意识的使用一些简单的方法来加密信息,通过一些(密码)象形文字相互传达信息。接着由于文字的出现和使用,确保通信的机密性就成为一种艺术,古代发明了不少加密信息和传达信息的方法。 事实上,密码学真正成为科学是在19世纪末和20世纪初期,由于军事、数学、通讯等相关技术的发展,特别是两次世界大战中对军事信息保密传递和破获敌方信息的需求,密码学得到了空前的发展,并广泛的用于军事情报部门的决策。 20世纪60年代计算机与通信系统的迅猛发展,促使人们开始考虑如何通过计算机和通信网络安全地完成各项事务,从而使得密码技术开始广泛应用于民间,也进一步促进了密码技术的迅猛发展。 二、应用场景 2.1 Hash函数 Hash函数(也称杂凑函数、散列函数)就是把任意长的输入消息串变化成固定长度的输出“0”、“1”串的函数,输出“0”、“1”串被称为该消息的Hash值(或杂凑值)。一个比较安全的Hash函数应该至少满足以下几个条件: ●输出串长度至少为128比特,以抵抗攻击。对每一个给定的输入,计算 Hash值很容易(Hash算法的运行效率通常都很高)。 ●对给定的Hash函数,已知Hash值,得到相应的输入消息串(求逆)是计 算上不可行的。 ●对给定的Hash函数和一个随机选择的消息,找到另一个与该消息不同的 消息使得它们Hash值相同(第二原像攻击)是计算上不可行的。 ●对给定的Hash函数,找到两个不同的输入消息串使得它们的Hash值相同 (即碰撞攻击)实际计算上是不可行的Hash函数主要用于消息认证算法 构造、口令保护、比特承诺协议、随机数生成和数字签名算法中。 Hash函数算法有很多,最著名的主要有MD系列和SHA系列,一直以来,对于这些算法的安全性分析结果没有很大突破,这给了人们足够的信心相信它们是足够安全的,并被广泛应用于网络通信协议当中。

密码学实验报告(AES,RSA)

华北电力大学 实验报告| | 实验名称现代密码学课程设计 课程名称现代密码学 | | 专业班级:学生姓名: 学号:成绩: 指导教师:实验日期:

[综合实验一] AES-128加密算法实现 一、实验目的及要求 (1)用C++实现; (2)具有16字节的加密演示; (3)完成4种工作模式下的文件加密与解密:ECB, CBC, CFB,OFB. 二、所用仪器、设备 计算机、Visual C++软件。 三. 实验原理 3.1、设计综述 AES 中的操作均是以字节作为基础的,用到的变量也都是以字节为基础。State 可以用4×4的矩阵表示。AES 算法结构对加密和解密的操作,算法由轮密钥开始,并用Nr 表示对一个数据分组加密的轮数(加密轮数与密钥长度的关系如表2所示)。AES 算法的主循环State 矩阵执行1 r N 轮迭代运算,每轮都包括所有 4个阶段的代换,分别是在规范中被称为 SubBytes(字节替换)、ShiftRows(行位移变换)、MixColumns(列混合变换) 和AddRoundKey ,(由于外部输入的加密密钥K 长度有限,所以在算法中要用一个密钥扩展程序(Keyexpansion)把外部密钥 K 扩展成更长的比特串,以生成各轮的加密和解密密钥。最后执行只包括 3个阶段 (省略 MixColumns 变换)的最后一轮运算。 表2 AES 参数 比特。

3.2、字节代替(SubBytes ) AES 定义了一个S 盒,State 中每个字节按照如下方式映射为一个新的字节:把该字节的高4位作为行值,低4位作为列值,然后取出S 盒中对应行和列的元素作为输出。例如,十六进制数{84}。对应S 盒的行是8列是4,S 盒中该位置对应的值是{5F}。 S 盒是一个由16x16字节组成的矩阵,包含了8位值所能表达的256种可能的变换。S 盒按照以下方式构造: (1) 逐行按照升序排列的字节值初始化S 盒。第一行是{00},{01},{02},…,{OF}; 第二行是{10},{l1},…,{1F}等。在行X 和列Y 的字节值是{xy}。 (2) 把S 盒中的每个字节映射为它在有限域GF(k 2)中的逆。GF 代表伽罗瓦域,GF(82) 由一组从0x00到0xff 的256个值组成,加上加法和乘法。 ) 1(] [2)2(3488++++= x x x x X Z GF 。{00}被映射为它自身{00}。 (3) 把S 盒中的每个字节记成),,,,,,,,(012345678b b b b b b b b b 。对S 盒中每个字节的每位 做如下变换: i i i i i i c b b b b b i b ⊕⊕⊕⊕⊕='++++8mod )7(8mod )6(8mod )5(8mod )4( 上式中i c 是指值为{63}字节C 第i 位,即)01100011(),,,,,,,,(012345678=c c c c c c c c c 。符号(')表示更新后的变量的值。AES 用以下的矩阵方式描述了这个变换: ?? ? ?? ? ? ? ? ? ??? ? ????????????+???????????????????????????????????????? ????????????=??????????????????????????0110001111111000011111000011111000011111100011111100011111100011111100017654321076543210b b b b b b b b b b b b b b b b 最后完成的效果如图:

《密码学》期末考试试卷

新乡学院 2013-2014 学年度第一学期 《密码学》期末考试试卷 2010级信息与计算科学专业,考试时间:100分钟,考试方式:随堂考,满分100分 一、判断题(每小题2分,正确的在后面的括号内打“√”,错误的在后面的括号内打“×”) 1. 1976年,美国数据加密标准(DES)的公布使密码学的研究公开,从而开创了现在密码 学的新纪元,失眠墓穴发展史上的一次质的飞跃。() 2. 密码学的发展大致经历了两个阶段:传统密码学和现在密码学。() 3. 现在密码体质的安全性不应取决于不易改变的算法,而应取决于可是随时改变的密钥。 () 4. Hash函数也称为散列函数、哈希函数、杂凑函数等,是一个从消息空间到像空间的可逆 映射。() 5. 成熟的公钥密码算法出现以后,对称密码算法在实际中已无太大利用价值了。() 二、选择题(每小题2分,将正确答案的标号写在后面的括号内) 1. 若Alice要向Bob分发一个会话密钥,采用ElGamal公钥加密算法,那么Alice对该回 话密钥进行加密应该选用的是()(A)Alice的公钥(B)Alice的私钥(C)Bob的公钥(D)Bob的私钥 2. 下列算法中,不具有雪崩效应的是() (A)DES加密算法(B)序列密码的生成算法(C)哈希函数(D)RSA加密算法 3. 下列选项中,不是Hash函数的主要应用的是() (A)数据加密(B)数字签名(C)文件校验(D)认证协议 4. 对于二元域上的n元布尔函数,其总个数为()(A)n2(B)n22(C)n2(D)以上答案都不对 5. 下列密码算法中,不属于序列密码范畴的是() (A)RC4算法(B)A5算法(C)DES算法(D)WAKE算法 三、填空题(每小题1分,共20分) 1. 序列密码通常可以分为____序列密码和____序列密码。 2. 布尔函数是对称密码中策重要组件,其表示方法主要有____表示、____表示、____表示、 ____表示、____表示、____表示等。 3. 为了抗击各种已有的攻击方法,密码体制中的布尔函数的设计需要满足各种相应的设计 准则,这些设计准则主要有:________、________、________、________、________。 4. Hash函数就是把任意的长度的输入,通过散列函数,变换成固定长度的输出,该输出称 为____,Hash函数的单向性是指:____________________,Hash函数的抗碰撞性是指:________________。 5. 常用的公钥密码算法有:________、________、________、________。 四、简答题(每小题10分,共30分) 1. 简述RSA公钥密码体制中的密钥对的生成步骤、主要攻击方法以及防范措施。 2. 简述ElGamal公钥密码体制中的加密和解密过程。

现代密码学学习报告

现代密码学学习报告 第一章 概论 1.1信息安全与密码技术 信息的一般定义属于哲学范畴。信息是事物运动的状态与方式,是事物的一种区别于物质与能量的属性。 “信息”——数据。 机密性——拥有数据的一方或交换数据的各方不希望局外人或对手获得、进而读懂这些数据。 完整性——数据在交换及保存中不被未授权者删除或改动,或者合法的接受者能方便的判断该数据是否已经被篡改。 认证性——也称“不可否认性”或“抗抵赖”,包括信息源和接收端认证性,即信息系统中的实体不能否认或抵赖曾经完成的发送消息或接收消息的操作。利用信息源证据可以检测出消息发送方否认已发送某消息的抵赖行为,利用接收端证据可以检测出消息接收方否认已接收某消息的抵赖行为。此类证据通常还包括时间/时序或“新鲜性”证据。 可用性——授权用户能对信息资源有效使用。显然,信息系统可靠性是其支撑之一。 公平性——信息具有的社会或经济价值只能在交互中体现。公平性就是指交换规则或交互协议要使得参与信息交互的各方承担安全风险上处于相同或相当的地位。 可控性——是指对信息的传播及传播的内容以至信息的机密性具有控制能力的特性。一般指信息系统或(社会)授权机构根据某种法规对信息的机密性、信息的传播通道、特定内容信息的传播具有控制能力的特性,以及获取信息活动审计凭证能力的特性,如“密钥托管”、“匿名撤销”、实时内容检测与过滤、计算机犯罪或诉讼的司法取证等。 1.2密码系统模型和密码体制 密码系统基本模型: 密码体制的分类:对称密码体制的古典算法有简单代换、多名代换、多表代换等。 非对称密码体制:使用非对称密码体制的每一个用户一个是可以公开的,称为公开密钥,简称公钥,用pku 表示;另外一个则是秘密的,称为秘密秘钥,简称私钥,用sku 表示。非对称密码体制又称为双钥密码体制或公钥密码体制。 公钥密码体制的主要特点是将加密能力分开并分别并分别授予不同的用户,因而可以实现信 源M 加密器() c m =1k E 非法接入者密码分析员 (窃听者)搭线信道 (主动攻击) 搭线信道(被动攻击)解密器接收者 ()m c =2k D 密钥源密钥源1K 2 K m m 'm c ' c 1 k 2k 信道密钥信道

JNU2012密码学期末真题考题

密码学作业 作业要求 1按下面各题要求回答问题; 2上机进行实验 3索引二篇公开发表有关计算机密码学的文章。时间发表在2009年以后 4考试当日,答题前交到监考老师处(二篇文章,本作业) 二.密码体制分类 密码体制从原理上可分为两大类,即单钥体制和双钥体制。 单钥体制的加密密钥和解密密钥相同。采用单钥体制的系统的保密性主要取决于密钥的保密性,与算法的保密性无关,即由密文和加解密算法不可能得到明文。换句话说,算法无需保密,需保密的仅是密钥。 换句话说,算法无需保密,需保密的仅是密钥。根据单钥密码体制的这种特性,单钥加解密算法可通过低费用的芯片来实现。密钥可由发送方产生然后再经一个安全可靠的途径(如信使递送)送至接收方,或由第三方产生后安全可靠地分配给通信双方。如何产生满足保密要求的密钥以及如何将密钥安全可靠地分配给通信双方是这类体制设计和实现的主要课题。密钥产生、分配、存储、销毁等问题,统称为密钥管理。这是影响系统安全的关键因素,即使密码算法再好,若密钥管理问题处理不好,就很难保证系统的安全保密。单钥体制对明文消息的加密有两种方式:一是明文消息按字符(如二元数字)逐位地加密,称之为流密码;另一种是将明文消息分组(含有多个字符),逐组地进行加密,称之为分组密码。单钥体制不仅可用于数据加密,也可用于消息的认证。 双钥体制是由Diffie和Hellman于1976年首先引入的。采用双钥体制的每个用户都有一对选定的密钥:一个是可以公开的,可以像电话号码一样进行注册公布;另一个则是秘密的。因此双钥体制又称为公钥体制。 双钥密码体制的主要特点是将加密和解密能力分开,因而可以实现多个用户加密的消息只能由一个用户解读,或由一个用户加密的消息而使多个用户可以解读。前者可用于公共网络中实现保密通信,而后者可用于实现对用户的认证。 三.扩散和混淆 扩散和混淆是由Shannon提出的设计密码系统的两个基本方法,目的是抗击敌手对密码系统的统计分析。 所谓扩散,就是将明文的统计特性散布到密文中去,实现方式是使得明文的每一位影响密文中多位的值,等价于说密文中每一位均受明文中多位影响。 混淆是使密文和密钥之间的统计关系变得尽可能复杂,以使敌手无法得到密钥。因此即使敌手能得到密文的一些统计关系,由于密钥和密文之间的统计关系复杂化,敌手也无法得到密钥。 七.什么是零知识证明?下图表示一个简单的迷宫,C与D之间有一道门,需要知道秘密口令才能将其打开。P向V证明自己能打开这道门,但又不愿向V泄露秘密口令。可采用什么协议?

相关文档
最新文档