Giáo trình Mật mã học (Phần 2)
Tóm tắt Giáo trình Mật mã học (Phần 2): ...ã gửi thì R đã đ−ợc xác thực đối với S .S gửi trả ( )NEX cho R . 7. Nếu R thu đ−ợc N đã gửi ở b−ớc 4 thì S đã đ−ợc xác thực đối với R . Sau khi Clipper đã hoμn thμnh việc trao đổi khóa, nó bắt đầu l−u chuyển thông báo với bên thu (mỗi thông báo có kèm Giáo trình Mật mã học 218 theo LEA...o ra một đầu ra có kích th−ớc đúng bằng kích th−ớc đầu vμo hoặc hơi lớn hơn một chút. (Một vector khởi tạo hoặc các bit độn lμm đầy đủ cho khối cuối cùng sẽ lμm tăng tối đa lμ một hoặc hai khối). Trong các thuật toán công khai, đầu ra có quan hệ với kích th−ớc đầu vμo nh−ng không nhất thiế...máy chủ. CSDL Máy chủ xác thực (AS) Máy chủ cấp thẻ (TGS) Cơ sở dữ liệu (3) Trạm làm việc nhắc nhở ng−ời dùng đ−a vào mật khẩu để giải mã thông tin tới rồi gửi thẻ và chứng chỉ xác thực có chứa tên ng−ời sử dụng, địa chỉ mạng và thời gian tới TGS Một lần với mỗi phiên đă...
0400L,
0#00000404L, 0#01000400L, 0#01000400L, 0#00000000L,
0#00010004L, 0#00010400L, 0#00000000L, 0#01010004L };
static unsigned long SP2[64] = {
0x80108020L, 0x80008000L, 0#00008000L, 0#00108020L,
0#00100000L, 0#00000020L, 0x80100020L, 0x80008020L,
0x80000020L, 0x80108020L, 0x80108000L, 0x80000000L,
Phần Phụ lục
321
0x80008000L, 0#00100000L, 0#00000020L, 0x80100020L,
0#00108000L, 0#00100020L, 0x80008020L, 0#00000000L,
0x80000000L, 0#00008000L, 0#00108020L, 0x80100000L,
0#00100020L, 0x80000020L, 0#00000000L, 0#00108000L,
0#00008020L, 0x80108000L, 0x80100000L, 0#00008020L,
0#00000000L, 0#00108020L, 0x80100020L, 0#00100000L,
0x80008020L, 0x80100000L, 0x80108000L, 0#00008000L,
0x80100000L, 0x80008000L, 0#00000020L, 0x80108020L,
0#00108020L, 0#00000020L, 0#00008000L, 0x80000000L,
0#00008020L, 0x80108000L, 0#00100000L, 0x80000020L,
0#00100020L, 0x80008020L, 0x80000020L, 0#00100020L,
0#00108000L, 0#00000000L, 0x80008000L, 0#00008020L,
0x80000000L, 0x80100020L, 0x80108020L, 0#00108000L };
static unsigned long SP3[64] = {
0#00000208L, 0#08020200L, 0#00000000L, 0#08020008L,
0#08000200L, 0#00000000L, 0#00020208L, 0#08000200L,
0#00020008L, 0#08000008L, 0#08000008L, 0#00020000L,
0#08020208L, 0#00020008L, 0#08020000L, 0#00000208L,
0#08000000L, 0#00000008L, 0#08020200L, 0#00000200L,
0#00020200L, 0#08020000L, 0#08020008L, 0#00020208L,
0#08000208L, 0#00020200L, 0#00020000L, 0#08000208L,
0#00000008L, 0#08020208L, 0#00000200L, 0#08000000L,
0#08020200L, 0#08000000L, 0#00020008L, 0#00000208L,
0#00020000L, 0#08020200L, 0#08000200L, 0#00000000L,
0#00000200L, 0#00020008L, 0#08020208L, 0#08000200L,
0#08000008L, 0#00000200L, 0#00000000L, 0#08020008L,
0#08000208L, 0#00020000L, 0#08000000L, 0#08020208L,
0#00000008L, 0#00020208L, 0#00020200L, 0#08000008L,
0#08020000L, 0#08000208L, 0#00000208L, 0#08020000L,
0#00020208L, 0#00000008L, 0#08020008L, 0#00020200L };
static unsigned long SP4[64] = {
0#00802001L, 0#00002081L, 0#00002081L, 0#00000080L,
0#00802080L, 0#00800081L, 0#00800001L, 0#00002001L,
0#00000000L, 0#00802000L, 0#00802000L, 0#00802081L,
0#00000081L, 0#00000000L, 0#00800080L, 0#00800001L,
0#00000001L, 0#00002000L, 0#00800000L, 0#00802001L,
0#00000080L, 0#00800000L, 0#00002001L, 0#00002080L,
0#00800081L, 0#00000001L, 0#00002080L, 0#00800080L,
0#00002000L, 0#00802080L, 0#00802081L, 0#00000081L,
0#00800080L, 0#00800001L, 0#00802000L, 0#00802081L,
0#00000081L, 0#00000000L, 0#00000000L, 0#00802000L,
Giáo trình Mật mã học
322
0#00002080L, 0#00800080L, 0#00800081L, 0#00000001L,
0#00802001L, 0#00002081L, 0#00002081L, 0#00000080L,
0#00802081L, 0#00000081L, 0#00000001L, 0#00002000L,
0#00800001L, 0#00002001L, 0#00802080L, 0#00800081L,
0#00002001L, 0#00002080L, 0#00800000L, 0#00802001L,
0#00000080L, 0#00800000L, 0#00002000L, 0#00802080L };
static unsigned long SP5[64] = {
0#00000100L, 0#02080100L, 0#02080000L, 0x42000100L,
0#00080000L, 0#00000100L, 0x40000000L, 0#02080000L,
0x40080100L, 0#00080000L, 0#02000100L, 0x40080100L,
0x42000100L, 0x42080000L, 0#00080100L, 0x40000000L,
0#02000000L, 0x40080000L, 0x40080000L, 0#00000000L,
0x40000100L, 0x42080100L, 0x42080100L, 0#02000100L,
0x42080000L, 0x40000100L, 0#00000000L, 0x42000000L,
0#02080100L, 0#02000000L, 0x42000000L, 0#00080100L,
0#00080000L, 0x42000100L, 0#00000100L, 0#02000000L,
0x40000000L, 0#02080000L, 0x42000100L, 0x40080100L,
0#02000100L, 0x40000000L, 0x42080000L, 0#02080100L,
0x40080100L, 0#00000100L, 0#02000000L, 0x42080000L,
0x42080100L, 0#00080100L, 0x42000000L, 0x42080100L,
0#02080000L, 0#00000000L, 0x40080000L, 0x42000000L,
0#00080100L, 0#02000100L, 0x40000100L, 0#00080000L,
0#00000000L, 0x40080000L, 0#02080100L, 0x40000100L };
static unsigned long SP6[64] = {
0x20000010L, 0x20400000L, 0#00004000L, 0x20404010L,
0x20400000L, 0#00000010L, 0x20404010L, 0#00400000L,
0x20004000L, 0#00404010L, 0#00400000L, 0x20000010L,
0#00400010L, 0x20004000L, 0x20000000L, 0#00004010L,
0#00000000L, 0#00400010L, 0x20004010L, 0#00004000L,
0#00404000L, 0x20004010L, 0#00000010L, 0x20400010L,
0x20400010L, 0#00000000L, 0#00404010L, 0x20404000L,
0#00004010L, 0#00404000L, 0x20404000L, 0x20000000L,
0x20004000L, 0#00000010L, 0x20400010L, 0#00404000L,
0x20404010L, 0#00400000L, 0#00004010L, 0x20000010L,
0#00400000L, 0x20004000L, 0x20000000L, 0#00004010L,
0x20000010L, 0x20404010L, 0#00404000L, 0x20400000L,
0#00404010L, 0x20404000L, 0#00000000L, 0x20400010L,
0#00000010L, 0#00004000L, 0x20400000L, 0#00404010L,
0#00004000L, 0#00400010L, 0x20004010L, 0#00000000L,
0x20404000L, 0x20000000L, 0#00400010L, 0x20004010L };
Phần Phụ lục
323
static unsigned long SP7[64] = {
0#00200000L, 0#04200002L, 0#04000802L, 0#00000000L,
0#00000800L, 0#04000802L, 0#00200802L, 0#04200800L,
0#04200802L, 0#00200000L, 0#00000000L, 0#04000002L,
0#00000002L, 0#04000000L, 0#04200002L, 0#00000802L,
0#04000800L, 0#00200802L, 0#00200002L, 0#04000800L,
0#04000002L, 0#04200000L, 0#04200800L, 0#00200002L,
0#04200000L, 0#00000800L, 0#00000802L, 0#04200802L,
0#00200800L, 0#00000002L, 0#04000000L, 0#00200800L,
0#04000000L, 0#00200800L, 0#00200000L, 0#04000802L,
0#04000802L, 0#04200002L, 0#04200002L, 0#00000002L,
0#00200002L, 0#04000000L, 0#04000800L, 0#00200000L,
0#04200800L, 0#00000802L, 0#00200802L, 0#04200800L,
0#00000802L, 0#04000002L, 0#04200802L, 0#04200000L,
0#00200800L, 0#00000000L, 0#00000002L, 0#04200802L,
0#00000000L, 0#00200802L, 0#04200000L, 0#00000800L,
0#04000002L, 0#04000800L, 0#00000800L, 0#00200002L };
static unsigned long SP8[64] = {
0x10001040L, 0#00001000L, 0#00040000L, 0x10041040L,
0x10000000L, 0x10001040L, 0#00000040L, 0x10000000L,
0#00040040L, 0x10040000L, 0x10041040L, 0#00041000L,
0x10041000L, 0#00041040L, 0#00001000L, 0#00000040L,
0x10040000L, 0x10000040L, 0x10001000L, 0#00001040L,
0#00041000L, 0#00040040L, 0x10040040L, 0x10041000L,
0#00001040L, 0#00000000L, 0#00000000L, 0x10040040L,
0x10000040L, 0x10001000L, 0#00041040L, 0#00040000L,
0#00041040L, 0#00040000L, 0x10041000L, 0#00001000L,
0#00000040L, 0x10040040L, 0#00001000L, 0#00041040L,
0x10001000L, 0#00000040L, 0x10000040L, 0x10040000L,
0x10040040L, 0x10000000L, 0#00040000L, 0x10001040L,
0#00000000L, 0x10041040L, 0#00040040L, 0x10000040L,
0x10040000L, 0x10001000L, 0x10001040L, 0#00000000L,
0x10041040L, 0#00041000L, 0#00041000L, 0#00001040L,
0#00001040L, 0#00040040L, 0x10000000L, 0x10041000L };
static void desfunc(block, keys)
register unsigned long *block, *keys;
{
register unsigned long fval, work, right, leftt;
register int round;
leftt = block[0];
right = block[1];
work = ((leftt >> 4) ^ right) & 0#0f0f0f0fL;
right ^= work;
leftt ^= (work << 4);
Giáo trình Mật mã học
324
work = ((leftt >> 16) ^ right) & 0#0000ffffL;
right ^= work;
leftt ^= (work << 16);
work = ((right >> 2) ^ leftt) & 0x33333333L;
leftt ^= work;
right ^= (work << 2);
work = ((right >> 8) ^ leftt) & 0#00ff00ffL;
leftt ^= work;
right ^= (work << 8);
right = ((right > 31) & 1L)) & 0xffffffffL;
work = (leftt ^ right) & 0xaaaaaaaaL;
leftt ^= work;
right ^= work;
leftt = ((leftt > 31) & 1L)) & 0xffffffffL;
for( round = 0; round < 8; round++ ) {
work = (right > 4);
work ^= *keys++;
fval = SP7[ work & 0x3fL];
fval |= SP5[(work >> 8) & 0x3fL];
fval |= SP3[(work >> 16) & 0x3fL];
fval |= SP1[(work >> 24) & 0x3fL];
work = right ^ *keys++;
fval |= SP8[ work & 0x3fL];
fval |= SP6[(work >> 8) & 0x3fL];
fval |= SP4[(work >> 16) & 0x3fL];
fval |= SP2[(work >> 24) & 0x3fL];
leftt ^= fval;
work = (leftt > 4);
work ^= *keys++;
fval = SP7[ work & 0x3fL];
fval |= SP5[(work >> 8) & 0x3fL];
fval |= SP3[(work >> 16) & 0x3fL];
fval |= SP1[(work >> 24) & 0x3fL];
work = leftt ^ *keys++;
fval |= SP8[ work & 0x3fL];
fval |= SP6[(work >> 8) & 0x3fL];
fval |= SP4[(work >> 16) & 0x3fL];
fval |= SP2[(work >> 24) & 0x3fL];
right ^= fval;
}
right = (right > 1);
work = (leftt ^ right) & 0xaaaaaaaaL;
leftt ^= work;
right ^= work;
leftt = (leftt > 1);
Phần Phụ lục
325
work = ((leftt >> 8) ^ right) & 0#00ff00ffL;
right ^= work;
leftt ^= (work << 8);
work = ((leftt >> 2) ^ right) & 0x33333333L;
right ^= work;
leftt ^= (work << 2);
work = ((right >> 16) ^ leftt) & 0#0000ffffL;
leftt ^= work;
right ^= (work << 16);
work = ((right >> 4) ^ leftt) & 0#0f0f0f0fL;
leftt ^= work;
right ^= (work << 4);
*block++ = right;
*block = leftt;
return;
}
/* Validation sets:
*
* Single-length key, single-length plaintext -
* Key : 0123 4567 89ab cdef
* Plain : 0123 4567 89ab cde7
* Cipher : c957 4425 6a5e d31d
*
**********************************************************************/
void des_key(des_ctx *dc, unsigned char *key){
deskey(key,EN0);
cpkey(dc->ek);
deskey(key,DE1);
cpkey(dc->dk);
}
/* Encrypt several blocks in ECB mode. Caller is responsible for
short blocks. */
void des_enc(des_ctx *dc, unsigned char *data, int blocks){
unsigned long work[2];
int i;
unsigned char *cp;
cp = data;
for(i=0;iek);
unscrun(work,cp);
cp+=8;
}
}
void des_dec(des_ctx *dc, unsigned char *data, int blocks){
unsigned long work[2];
int i;
Giáo trình Mật mã học
326
unsigned char *cp;
cp = data;
for(i=0;idk);
unscrun(work,cp);
cp+=8;
}
}
void main(void){
des_ctx dc;
int i;
unsigned long data[10];
char *cp,key[8] = {0#01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef};
char x[8] = {0#01,0x23,0x45,0x67,0x89,0xab,0xcd,0xe7};
cp = x;
des_key(&dc,key);
des_enc(&dc,cp,1);
printf("Enc(0..7,0..7) = ");
for(i=0;i<8;i++) printf("%02x ", ((unsigned int) cp[i])&0#00ff);
printf("\n");
des_dec(&dc,cp,1);
printf("Dec(above,0..7) = ");
for(i=0;i<8;i++) printf("%02x ",((unsigned int)cp[i])&0#00ff);
printf("\n");
cp = (char *) data;
for(i=0;i<10;i++)data[i]=i;
des_enc(&dc,cp,5); /* Enc 5 blocks. */
for(i=0;i<10;i+=2) printf("Block %01d = %08lx %08lx.\n",
i/2,data[i],data[i+1]);
des_dec(&dc,cp,1);
des_dec(&dc,cp+8,4);
for(i=0;i<10;i+=2) printf("Block %01d = %08lx %08lx.\n",
i/2,data[i],data[i+1]);
}
thuật ngữ viết tắt
DES Data Encryption Standard Chuẩn mã dữ liệu
LAN Local Area Network Mạng cục bộ
MDV Mã dịch vòng
MTT Mã thay thế
MHV Mã hoán vị
ECB Electronic Code Book Chế độ quyển mã điện tử
CFB Cripher Feedback Chế độ phản hồi mã
CBC Cripher Block Chaining Chế độ liên kết khối mã
RSA Rivest - Shamir - Adleman
MAC Message Authentication Code Mã xác thực thông báo
OWHF Oneway Hash Funtion Hàm băm một chiều
CRHF Collision Resistant hash function Hàm băm khó va chạm
MDC Manipulation Detection Code Mã phát hiện sự sửa đổi
LSB Least Signification Bit Bit thấp nhất (có giá trị nhỏ
nhất
Header Tiêu đề
IDEA International Data Encryption
Algorithm
Thuật toán mã hóa dữ liệu
quốc tế
PGP Pretty Good Privacy Thuật toán mã hóa PGP
SET Secure Electronic Transaction Giao dịch điện tử an toàn
LFSR Linear Feedback Sequence
Register
Thanh ghi hồi tiếp tuyến tính
Firewall Bức t−ờng lửa
Server Máy chủ
Router Bộ định tuyến
tμi liệu tham khảo
[1] A. J. Menezes, P. C. Van Oorschot, S. A. Vanstone.
Handbook of applied cryptography. CRC Press 1998.
[2] B. Schneier. Applied Cryptography. John Wiley Press 1996.
[3] D. R. Stinson. Cryptography. Theory and Practice. CRC Press
1995.
[4] Nguyen Binh. Crypto-system based on Cyclic Goemetric
Progresssions over polynomial ring (Part 1). Circulant crypto-
system over polynomial ring (Part 2) 8th VietNam Conference on
Radio and Electronics, 11-2002
[5] M. R. A. Huth. Secure Communicating Systems. Cambridge
University Press 2001.
[6] W. Stallings. Network Security Essentials. Applications and
Standards. Prentice Hall. 2000.
[7] C. Pfleeger. Security in Computing. Prentice Hall. 1997.
[8] R. Needham, M. Schroeder. Using Encryption for
Authentication in large Networks of Computers. Comm ACM,
v21 n12, Dec 1978.
[9] G. Simmons. Contemporary Cryptology. IEEE Press 1992.
[10] S. Bellovir, M. Merritt. Encrypted Key Exchange.
Proc. IEEE Symp. Security and Privacy
IEEE Comp Soc Press 1992.
[11] D. Denning, D. Branstad. A Taxonomy of Key Escrow
Encryption Systems. Comm ACM, v39 n3, Mar 1996.
[12] M. Blum. Coin flipping by Telephone. SIGACT News, 1981.
[13] S. Even. A Randomizing Protocol for Signing Contracts. Comm
ACM, v28 n6, Jun 1985.
[14] R. Merkle, M. Hellman. On the security of Multiple Encryption.
Comm ACM, v24 n7, July 1981.
[15] W. Tuchman, Hellman Presents No Shortcut Solutions to the
DES.
IEEE Spectrum, v16 n7, Jun 1979.
[16] A.Shamir. Identity-based cryptorytions and signature schemes.
Advanced in Cryptology - CRYPTO'84, LNCS196
Springer_Verlag, pp.47-53, 1985
[17] E.Okamoto, K.Tanaka. Key distribution system based on
identification information.
IEEE J.Selected Areas in communications, Vol.7,pp.481-485,
1989.
Mục lục
Lời nói đầu ................................................................................................ 5
Phần I. Các kiến thức toán học phụ trợ
Ch−ơng 1: Bổ túc về lý thuyết số .......................................................... 9
1.1. Số nguyên ....................................................................................... 9
1.2. Các thuật toán trong Z ................................................................. 12
1.3. Các số nguyên modulo n .............................................................. 15
1.4. Các thuật toán trong Zn ............................................................... 22
1.5. Các ký hiệu Legendre vμ Jacobi .................................................. 24
1.6. Các số nguyên Blum ..................................................................... 30
Bμi tập ................................................................................................. 31
Ch−ơng 2: Đại số trừu t−ợng ............................................................... 35
2.1. Nhóm .............................................................................................. 35
2.2. Vμnh ............................................................................................... 38
2.3. Tr−ờng ............................................................................................ 39
2.4. Vμnh đa thức .................................................................................. 41
Bμi tập ................................................................................................... 53
Phần II. Các thuật toán mật mã
Ch−ơng 3: Mật mã cổ điển .................................................................. 57
3.1. Sơ đồ khối một hệ truyền tin mật ................................................. 57
3.2. Mật mã thay thế ............................................................................ 58
3.3. Mật mã hoán vị .............................................................................. 62
3.4. Mật mã Hill .................................................................................... 64
3.5. Hệ mật xây dựng trên các cấp số nhân xyclic
trên vμnh đa thức .......................................................................... 70
3.6. Mã Affine ........................................................................................ 81
3.7. Các hệ mật mã tích ........................................................................ 88
3.8. Các hệ mã dòng .............................................................................. 92
3.9. Chuẩn mã dữ liệu .......................................................................... 98
Bμi tập ................................................................................................ 120
Ch−ơng 4: Mật mã khoá công khai .................................................. 127
4.1. Giới thiệu về mật mã khoá công khai ......................................... 127
4.2. Hệ mật RSA ................................................................................. 130
4.3. Hệ mật Rabin .............................................................................. 133
4.4. Hệ mật El Gamal ......................................................................... 136
4.5. Hệ mật Merkle - Hellman ........................................................... 138
4.6. Hệ mật Chor - Rivest................................................................... 141
4.7. Hệ mật Mc Elice .......................................................................... 147
4.8. Các hμm băm vμ tính toμn vẹn của dữ liệu ................................ 153
Bμi tập ................................................................................................. 172
Phần III. Các thủ tục vμ ứng dụng
Ch−ơng 5: Các thủ tục vμ các chú ý trong thực tế
khi sử dụng mã hoá ....................................................... 177
5.1. Các thủ tục: hμnh vi vμ thứ tự ................................................... 177
5.2. Các thủ tục để giải quyết vấn đề ................................................ 184
5.3. Sử dụng mã hoá nh− thế nμo...................................................... 242
5.4. Cải thiện độ mật của hệ mật ...................................................... 249
5.5. Các chế độ mã hoá ....................................................................... 259
5.6. Tóm l−ợc về các thủ tục vμ các ứng dụng thực tế ...................... 263
Bμi tập ................................................................................................. 265
Ch−ơng 6: Các chuẩn vμ áp dụng ..................................................... 267
6.1. Bảo mật th− điện tử sử dụng PGP ............................................. 267
6.2. Giao dịch điện tử an toμn (set) ................................................... 273
6.3. ứng dụng xác thực - Kerberos .................................................... 279
Bμi tập ................................................................................................. 286
Phần phụ lục
Phụ lục 1: Lý thuyết thông tin trong các hệ mật .......................... 289
Phụ lục 2: Tạo số giả ngẫu nhiên ................................................... 311
Phụ lục 3: Mã nguồn DES .............................................................. 316
Thuật ngữ viết tắt ................................................................................ 327
Tμi liệu tham khảo .............................................................................. 329
giáo trình
mật mã học
Chịu trách nhiệm xuất bản
L−u Đức Văn
Chịu trách nhiệm bản thảo
học viện công nghệ b−u chính viễn thông
Biên tập : Đμo thị minh - bùi đức khánh
Chế bản : Vũ Hồng Nhung
Sửa bản in : bùi đức khánh
Trình bày bìa : Bùi ngọc khoa
(Giáo trình này đ−ợc ban hành theo Quyết định số 219/QĐ-QLNCKH
ngày 29/4/2003 của Giám đốc Học viện Công nghệ B−u chính Viễn thông)
nhμ xuất bản b−u điện
Trụ sở : 18 Nguyễn Du, TP. Hà Nội
Điện thoại : 04-9431283, 04-9432438 Fax: 04-9431285
E-mail : bientap@hn.vnn.vn
Chi nhánh : 27 Nguyễn Bỉnh Khiêm, Quận I, TP. Hồ Chí Minh
Điện thoại : 08-9100925 Fax: 08-9100924
E-mail : chinhanh-nxbbd@hcm.vnn.vn
M∙ số: HV 01 HM 04
M∙ số: HV 01 HM 04
M∙ số: HV 01 HM 04
In 700 cuốn, khổ 16 x 24 cm tại Công ty In Khoa học kỹ thuật
Số xuất bản: 1783/521/XB-QLXB do Cục Xuất bản cấp ngày 19/12/2003
In xong và nộp l−u chiểu tháng 02 năm 2004.
File đính kèm:
giao_trinh_mat_ma_hoc_phan_2.pdf



