chap2_传统秘密金钥系统-DES、CBC等
- 格式:pdf
- 大小:541.97 KB
- 文档页数:51
传统密码技术总结_技术季度总结随着信息技术的不断发展和普及,密码技术已经成为了信息安全的重要保障手段之一。
传统密码技术是密码学领域最早的研究方向,它由单向加密算法、对称加密算法和非对称加密算法三部分组成,下面我们分别对这三部分进行总结。
一、单向加密算法单向加密算法也被称为散列函数或哈希函数。
它通过将任意长度的输入数据哈希成固定长度的输出数据,保证了输入数据的不可逆性、唯一性和可验证性。
单向加密算法主要应用于数字签名、数字证书、口令验证、数据完整性校验等领域。
目前常用的单向加密算法包括MD5、SHA-1、SHA-2等。
但是,由于哈希算法的输入数据长度是不限制的,因此在实际应用中容易受到碰撞攻击、彩虹表攻击等攻击手段的影响,安全性较低,因此在传统密码技术中的地位日渐减弱。
对称加密算法也被称为私钥加密算法,是目前应用最广泛的一类加密技术。
对称加密算法的特点是加解密使用同一个密钥,速度快、安全性高、易于实现,主要应用于数据传输、文件加密等领域。
在传统密码技术中,DES、AES、IDEA等都是常见的对称加密算法。
但是,由于对称加密算法的密钥需要在传输过程中进行共享,因此密钥管理困难、密钥泄露可能性较高,安全性难以保证。
三、非对称加密算法非对称加密算法也被称为公钥加密算法,它与对称加密算法不同,加解密使用不同的密钥,其中一个作为公钥用于加密,另一个作为私钥用于解密。
RSA、ElGamal等算法都是非对称加密算法中比较典型的代表。
由于非对称加密算法具有广泛的应用领域和高度的安全性,因此在互联网通信、数字证书、电子签名、加密货币等领域有着重要的地位。
但是,非对称加密算法的算法复杂度较高、加解密速度较慢、密钥管理复杂等问题也影响了其在实际应用中的推广。
总结:传统密码技术在信息安全领域仍然发挥着重要的作用。
单向加密算法、对称加密算法和非对称加密算法分别解决了不同的加密需求,但是随着计算机技术的不断发展和安全威胁的不断增加,传统密码技术已经逐渐被更为安全、高效的新型加密技术所取代,如量子密码、同态加密、零知识证明等新兴密码技术将成为未来信息安全的重要保障手段。
加密技术一.加密技术的分类1.对称密钥:所谓对称密钥就是加密和解密用的密钥是相同的。
当一个文本要加密传送时,该文本用密钥加密构成密文,密文在信道上传送,收到密文后用同一个密钥将密文解出来,形成普通文体供阅读。
在对称密钥中,密钥的管理极为重要,一旦密钥丢失,密文将无密可保。
2.不对称密钥:所谓不对称密钥,指的是加密用的密钥和解密用的密钥不同,虽然两者之间存在一定的关系,但不可能轻易地从一个推导出另一个。
不对称密钥由于两个密钥(加密密钥和解密密钥)各不相同,因而可以将一个密钥公开,而将另一个密钥保密,同样可以起到加密的作用。
二.典型的传统加密算法如果是由一个字母表构成的替代密码,称为单表密码。
其替代过程是在明文和密码字符之间进行一对一的映射。
如果是由多个字母表构成的替代密码,称为多表密码。
(1)单表替代密码一种典型方法是凯撒(Caesar)密码,又叫循环移位密码。
它的加密方法就是把明文中所有字母都用它右边的第k个字母替代,并认为Z后边又是A。
这种映射关系表示为如下函数:F(a)=(a+k) mod n其中:a表示明文字母;n为字符集中字母个数;k为密钥。
映射表中,明文字母中在字母表中的相应位置数为C,(如A=1,B=2,…)形式如下:设k=3;对于明文P=COMPUTE SYSTEMS则f(C)=(3+3)mod 26=6=Ff(O)=(15+3)mod 26=18=Rf(M)=(13+3)mod 26=16=P┆f(S)=(19+3)mod 26=22=V密文C= E k(P)=FRPSXRWHUVBVWHPV。
(2)多表替代密码周期替代密码是一种常用的多表替代密码,又称为维吉尼亚(Vigenere)密码。
这种替代法是循环的使用有限个字母来实现替代的一种方法。
若明文信息m l m2m3…m n,采用n个字母(n个字母为B1,B2,…B n)替代法,那么,m l将根据字母B n的特征来替代,m n+l又将根据B1的特征来替代,m n+2又将根据B2的特征来替代……,如此循环。
公钥、私钥、SSLTLS、会话密钥、DES⼀,公钥私钥1,公钥和私钥成对出现2,公开的密钥叫公钥,只有⾃⼰知道的叫私钥3,⽤公钥加密的数据只有对应的私钥可以解密4,⽤私钥加密的数据只有对应的公钥可以解密5,如果可以⽤公钥解密,则必然是对应的私钥加的密6,如果可以⽤私钥解密,则必然是对应的公钥加的密假设⼀下,我找了两个数字,⼀个是1,⼀个是2。
我喜欢2这个数字,就保留起来,不告诉你们,然后我告诉⼤家,1是我的公钥。
我有⼀个⽂件,不能让别⼈看,我就⽤1加密了。
别⼈找到了这个⽂件,但是他不知道2就是解密的私钥啊,所以他解不开,只有我可以⽤数字2,就是我的私钥,来解密。
这样我就可以保护数据了。
我的好朋友x⽤我的公钥1加密了字符a,加密后成了b,放在⽹上。
别⼈偷到了这个⽂件,但是别⼈解不开,因为别⼈不知道2就是我的私钥,只有我才能解密,解密后就得到a。
这样,我们就可以传送加密的数据了。
现在我们知道⽤公钥加密,然后⽤私钥来解密,就可以解决安全传输的问题了。
如果我⽤私钥加密⼀段数据(当然只有我可以⽤私钥加密,因为只有我知道2是我的私钥),结果所有的⼈都看到我的内容了,因为他们都知道我的公钥是1,那么这种加密有什么⽤处呢?但是我的好朋友x说有⼈冒充我给他发信。
怎么办呢?我把我要发的信,内容是c,⽤我的私钥2,加密,加密后的内容是d,发给x,再告诉他解密看是不是c。
他⽤我的公钥1解密,发现果然是c。
这个时候,他会想到,能够⽤我的公钥解密的数据,必然是⽤我的私钥加的密。
只有我知道我得私钥,因此他就可以确认确实是我发的东西。
这样我们就能确认发送⽅⾝份了。
这个过程叫做数字签名。
当然具体的过程要稍微复杂⼀些。
⽤私钥来加密数据,⽤途就是数字签名。
好,复习⼀下:1,公钥私钥成对出现2,私钥只有我知道3,⼤家可以⽤我的公钥给我发加密的信了4,⼤家⽤我的公钥解密信的内容,看看能不能解开,能解开,说明是经过我的私钥加密了,就可以确认确实是我发的了。
银⾏密钥体系银⾏系统的密钥有三种,主密钥/pinkey/Mackey,其中pinkey是⽤来加密密码的,⽽mackey是⽤来校验报⽂是否有错码,主密钥是⽤来加密pinkey 和mackey的.其中主密钥加密pinkey和mackey是是⽤3des来加解密的代码如下:/*param:pKey:密钥(⼗六进制)strPlainAKey:需要加解密的字符串(⼗六进制)ciperAKey:返回值iflag:1解密 0加密*/void getCiper(char* pKey, char* strPlainAKey, char* ciperAKey, int iflag){unsigned char binPlainAKey[64] = {0};hex2binary(binPlainAKey, strPlainAKey, strlen(strPlainAKey));ASCIIStr2BinCharStrBy3DES(pKey,(unsigned char*)binPlainAKey,strlen(strPlainAKey)/2, (unsigned char*)ciperAKey, iflag);}/*param:pKey:密钥(⼗六进制)inBinary:加解密字符串的字节形式inLen:加解密字符串的长度binCharString:返回值iflag:1解密 0加密*/void ASCIIStr2BinCharStrBy3DES(char* pKey, unsigned char* inBinary, int inLen, unsigned char* binCharString,int iflag){unsigned char targetIdBin[DESBINARY_LEN] = {0}; //TargetIdLen=8// 3DES encriptionunsigned char key[LEN_OF_KEY];unsigned char block_key[9];memset(key, 0, LEN_OF_KEY);hex2binary(key, pKey, strlen(pKey));DES_key_schedule ks,ks2,ks3;memset(block_key, 0, sizeof(block_key));memcpy(block_key, key + 0, 8);DES_set_key_unchecked((const_DES_cblock*)block_key, &ks);memcpy(block_key, key + 8, 8);DES_set_key_unchecked((const_DES_cblock*)block_key, &ks2);memcpy(block_key, key + 0, 8);DES_set_key_unchecked((const_DES_cblock*)block_key, &ks3);unsigned char input[8];memset(input, 0, sizeof(input));unsigned char encryptedOutBinary[DESBINARY_LEN];memset(encryptedOutBinary, 0, sizeof(encryptedOutBinary));for(int i=0; i<inLen/8; i++){memset(targetIdBin, 0, sizeof(targetIdBin));memcpy((void*)targetIdBin, (const void*)(inBinary+i*8), 8);DES_ecb3_encrypt((const_DES_cblock*)targetIdBin, (DES_cblock*)encryptedOutBinary, &ks, &ks2, &ks3, iflag);binary2char((char*)binCharString+i*16, encryptedOutBinary, DESBINARY_LEN);}}//// A public function: convert binary string to character string, the character string's length = 2 // binary string.// @param charArray: character array. output.// @param binArray: binary array. input.// @param binLen: length of binary array.//void binary2char(char* charArray, const unsigned char* binArray, int binLen){int i;for(i = 0; i < binLen; i++){sprintf(charArray + 2*i, "%02X", binArray[i]);}charArray[2*i] = '\0';}//// A public function: convert hex string to binary string, the hex string's length = 2 * binary string.// @param binArray: binary array. output.// @param hexCharArray: character array contains hex string. input.// @param hexLen: length of hex string array. input.//void hex2binary(unsigned char* binArray, const char* hexCharArray, int hexLen){if (hexLen%2 != 0){printf("hex2binary(): length of input parameter hexCharArray should be even number!\n");return;}int i, j;//convert two hex chars to one bytechar atom[2 + 1] = "\0";for (i = 0, j = 0; i < hexLen/2; i++, j+=2){strncpy(atom, hexCharArray + j, sizeof(atom) - 1);atom[sizeof(atom) - 1] = '\0';binArray[i] = (unsigned char)strtol(atom, NULL, 16);}}⼀般来说,ATM拿到pinkey密⽂会使⽤主密钥解密,得到pinkey明⽂,然后是⽤帐号+密码⽣成pinblock明⽂,然后使⽤pinkey使⽤3des加密,然后传给后端⽣成pinblock明⽂的算法为:char uniteBytes(char a,char b){char c = (int(a-'0')<<4)+b-'0';return c;}/*** getHPin* 对密码进⾏转换* PIN格式* BYTE 1 PIN的长度* BYTE 2 – BYTE 3/4/5/6/7 4--12个PIN(每个PIN占4个BIT)* BYTE 4/5/6/7/8 – BYTE 8 FILLER “F” (每个“F“占4个BIT)* @param pin String* @return byte[]*/void getHPin(char* pin, char* encode){encode[0] = 6;encode[1] = uniteBytes(pin[0], pin[1]);encode[2] = uniteBytes(pin[2], pin[3]);encode[3] = uniteBytes(pin[4], pin[5]);encode[4] = 255;encode[5] = 255;encode[6] = 255;encode[7] = 255;}/*** getHAccno* 对帐号进⾏转换* BYTE 1 — BYTE 2 0X0000* BYTE 3 — BYTE 8 12个主帐号* 取主帐号的右12位(不包括最右边的校验位),不⾜12位左补“0X00”。
密钥管理系统密钥管理系统是一种通过密码保护数据的电子工具。
它被广泛应用于企业和个人的加密和安全保障工作中,可以帮助用户在互联网上安全地存储和传输机密信息。
随着网络科技的飞速发展,实现网络安全保护已经成为许多行业的共同需求。
本文将探讨密钥管理系统的定义、功能、应用及其对安全保障的作用。
一、密钥管理系统的定义密钥管理系统是一种基于加密技术的安全保护系统。
它主要依靠密码技术对机密信息进行加密,从而实现信息保密。
密钥管理系统通常包括密钥的生成、存储、交换、发布、注销等功能。
根据密钥的种类和用途,可将密钥管理系统分为对称密钥管理系统和非对称密钥管理系统。
对称密钥管理系统,又称为传统加密系统。
对称密钥系统商讨好密钥后,一方将密钥发送给另一方,双方共用该密钥。
这种方式的优点是加密速度快,缺点是密钥的传递对安全性要求较高,一旦密钥泄露,后果将非常严重。
非对称密钥管理系统是一种新型的加密方式。
它包含两种密码,一种是公开密码,另一种是私有密码。
公开密码可以自由分发,而私有密码只有用户本人知道。
非对称密钥系统鉴别双方身份后,通过传输公开密码,发出一次或多次数据交换请求,以了解对方具体要求、解密数据,等到对方全部要求满足时,再用私有密码加密数据,传递给对方的公开密码解密。
由于非对称密钥管理系统的特殊设计,数据交换时不需要传输密钥,因此更加具有安全性。
二、密钥管理系统的功能1.密钥生成和存储密钥生成和存储是密钥管理系统最基本的两个功能。
密钥生成是指根据要求自动产生密钥或者手动输入密钥;密钥存储是指将密钥安全地保存起来,并确定只有经过授权的用户才有权使用。
2.密钥交换密钥交换是指在安全通信前,双方交换密钥的过程。
在对称密钥系统中,通常采用密码固定的方法,即通信双方提前商定一个密钥,然后再进行交换。
在非对称密钥系统中,一般采用公钥加密的方式来实现密钥的安全交换。
3.密钥发布和注销密钥发布和注销是指从密钥管理系统中找到被授权的密钥,然后在需要的时候对密钥进行发布和撤销。