Tìm hiểu và viết phần mềm truyền dữ liệu giữa hai máy sử dụng kỹ thuật mã hóa IDEA

26 444 0
Tìm hiểu và viết phần mềm truyền dữ liệu giữa hai máy sử dụng kỹ thuật mã hóa IDEA

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Tìm hiểu và viết phần mềm truyền dữ liệu giữa hai máy sử dụng kỹ thuật mã hóa IDEA

1 B GIO DC V O TO TRNG I HC BCH KHOA H NI - BO CO MễN AN NINH MNG ti : : Tỡm hiu v vit phn mm truyn d liu gia hai mỏy s dng k thut mó húa IDEA Gin viờn hng dn : Lờ Xuõn Thnh Sinh viờn thc hin : H Ni 5-2015 Mc Lc I Li m u Phng phỏp IDEA (International Data Encryption Algorithm) l mt phng phỏp mó c phỏt trin bi Lai Hc Gia v James L.Massey ca ETH Zurich v c cụng b ln u tiờn vo nm 1991 Phng phỏp ny a nh l mt s thay th cho phng phỏp c DEA (Data Encryption Standard) Tin thõn ca IDEA l phng phỏp mó trc ú cú tờn l PES (Proposed Encryption Standard); lỳc u IDEA cũn cú tờn l IPES (Improved PES) Sau ny IDEA ó tr thnh tờn thng mi Nú s ht hn vo nm 2010-2011 IDEA ó c xỏc nhp sau phiờn bn u tiờn V1.0 c phỏt hin l khụng cũn an ton na IDEA l h mó thao tỏc trờn tng 64bit, mó húa cm rừ 64bit thnh cm mó 64bit, s dng 128bit lm khúa bao gm chui ln bin i liờn tip v tip theo l ln bin i u Ln bin i th r s dng khúa 16 bit Ki(r), 1ai_protocol); if (ListenSocket == INVALID_SOCKET) { printf("socket failed with error: %ld\n", WSAGetLastError()); freeaddrinfo(result); WSACleanup(); 22 return 1; } // Setup the TCP listening socket iResult = bind( ListenSocket, result->ai_addr, (int)result->ai_addrlen); if (iResult == SOCKET_ERROR) { printf("bind failed with error: %d\n", WSAGetLastError()); freeaddrinfo(result); closesocket(ListenSocket); WSACleanup(); return 1; } freeaddrinfo(result); iResult = listen(ListenSocket, SOMAXCONN); if (iResult == SOCKET_ERROR) { printf("listen failed with error: %d\n", WSAGetLastError()); closesocket(ListenSocket); WSACleanup(); return 1; } // Accept a client socket ClientSocket = accept(ListenSocket, NULL, NULL); if (ClientSocket == INVALID_SOCKET) { printf("accept failed with error: %d\n", WSAGetLastError()); closesocket(ListenSocket); WSACleanup(); return 1; } // No longer need server socket closesocket(ListenSocket); // Receive until the peer shuts down the connection { iResult = recv(ClientSocket, recvbuf, recvbuflen, 0); if (iResult > 0) { // Echo the buffer back to the sender iSendResult = send( ClientSocket, recvbuf, iResult, ); if (iSendResult == SOCKET_ERROR) { 23 printf("send failed with error: %d\n", WSAGetLastError()); closesocket(ClientSocket); WSACleanup(); return 1; } printf("Bytes sent: %d\n", iSendResult); } else if (iResult == 0) printf("Connection closing \n"); else { printf("recv failed with error: %d\n", WSAGetLastError()); closesocket(ClientSocket); WSACleanup(); return 1; } } while (iResult > 0); for (int i = 0; i < 16; i++) { key[i] = (byte) recvbuf[i]; } string keyS; StringSource(key, key.size(), true, new HexEncoder( new StringSink(keyS) ) // HexEncoder ); // StringSource cout [...]... giải mã lại là dữ liệu đa vào khối biến đổi của modul cuối cùng của quá trình mã hóa chỉ khác là khối dữ liệu thứ 2 và khối dữ liệu thứ 3 đã đổi chỗ cho nhau Cứ nh vậy, ta sẽ thu đợc: V81 = I11 V82 = I13 V83 = I12 13 V84 = I14 Vì hàm biến đổi cuối cùng của quá trình giải mã cũng giống nh khối biến đổi trong modul đầu tiên của quá trình mã hóa chỉ khác là có đổi chỗ của khối dữ liệu thứ 2 và khối dữ liệu. .. thể hiện quá trình mã hóa (theo chiều đi xuống bên trái) và quá trình giải mã (chiều đi lên bên phải) của thuật toán IDEA Mỗi modul đợc chia thành 2 khối nhỏ : khối biến đổi và khối mã hóa Khối biến đổi tơng ứng với quá trình đầu tiên trong mỗi modul, còn khối mã hóa tơng ứng với các quá trình còn lại ở phía cuối của sơ đồ, bên mã hóa ta nhận đợc các mối quan hệ sau giữa đầu ra và đầu vào của hàm biến... quá trình giải mã, đầu ra và đầu vào có mối quan hệ sau: J11 = Y1 U1 J13 = Y3 + U3 J12 = Y2 + U2 J14 = Y4 U4 Ta có: J11 = Y1 Z49-1 = W81 Z49 Z49-1 = W81 J12 = Y2 + - Z50 = W83 + Z50 + -Z50 = W83 J13 = Y3 + - Z51 = W82 + Z51 + -Z51 = W82 J14 = Y4 Z50-1 = W84 Z50 Z50-1 = W84 12 Nh vậy, kết quả thu đợc sau khối biến đổi thứ nhất của quá trình giải mã chính là dữ liệu rõ đa vào khối mã hóa cuối cùng... J14 = Y4 Z50-1 = W84 Z50 Z50-1 = W84 12 Nh vậy, kết quả thu đợc sau khối biến đổi thứ nhất của quá trình giải mã chính là dữ liệu rõ đa vào khối mã hóa cuối cùng của quá trình mã hóa chỉ khác là khối dữ liệu thứ 2 và khối dữ liệu thứ 3 đã đổi chỗ cho nhau Bây giờ ta sẽ xét đến mối quan hệ thu đợc theo sơ đồ 711: W81 = I81 + MAR(I81 + I83, I82 + I84 ) W82 = I83 + MAR(I81 + I83, I82 + I84 ) W83 = I82... cdecl main(int argc, char **argv) { AutoSeededRandomPool prng; SecByteBlock key (IDEA: :DEFAULT_KEYLENGTH),keyTest (IDEA: :DEFAULT_KEYLE NGTH); prng.GenerateBlock(key, key.size()); byte keyB [IDEA: :DEFAULT_KEYLENGTH], cipherB [IDEA: :DEFAULT_KEYLENGTH]; for (int i = 0; i < IDEA: :DEFAULT_KEYLENGTH; i++) { keyB[i] = key[i]; } byte iv [IDEA: :BLOCKSIZE]; prng.GenerateBlock(iv, sizeof(iv)); 15 string keyS, ivS, cipherS;... chỗ của khối dữ liệu thứ 2 và khối dữ liệu thứ 3 nên ta có bản rõ thu đợc sau giải mã giống bản rõ đa vào mã hóa V Phn mm th nghim V.1 Client #define WIN32_LEAN_AND_MEAN #include "stdafx.h" #include #include #include #include #include #include #include #include "osrng.h" using CryptoPP::AutoSeededRandomPool; #include ... 79 khi đầu vào là X và Y Và: V11 = J11 + MAR(J11 + J13, J12 + J14 ) =W81 + MAR(W81 + W82, W83 + W84 ) =I81 + MAR(I81 + I83, I82 + I84 ) + MAR[I81+MAR(I81+I83,I82+I84)+I83+MAR(I81+I83,I82+I84 ), I82+MAL(I81+I83,I82 +I84) +I84+MAL(I81+I83, I82 + I84 )] = I81+MAR(I81+I83,I82 +I84) +MAR(I81+I83, I82 + I84 ) = I81 Tơng tự ta có: V12 = I82 V13 = I83 V14 = I84 Nh vậy, kết quả thu đợc sau khối mã hóa thứ nhất... #include "idea. h" using CryptoPP: :IDEA; #include "modes.h" using CryptoPP::CBC_Mode; #include "secblock.h" using CryptoPP::SecByteBlock; // Need to link with Ws2_32.lib #pragma comment (lib, "Ws2_32.lib") #pragma comment (lib, "Mswsock.lib") #define DEFAULT_BUFLEN 512 #define DEFAULT_PORT "27015" int cdecl main(void) { SecByteBlock key (IDEA: :DEFAULT_KEYLENGTH); byte iv [IDEA: :BLOCKSIZE]; byte cipher [IDEA: :DEFAULT_KEYLENGTH];... server!\n"); WSACleanup(); return 1; } // Send an initial buffer iResult = send( ConnectSocket, keyC, IDEA: :DEFAULT_KEYLENGTH, 0 ); if (iResult == SOCKET_ERROR) { printf("send failed with error: %d\n", WSAGetLastError()); closesocket(ConnectSocket); WSACleanup(); return 1; } iResult = send( ConnectSocket, ivC, IDEA: :BLOCKSIZE, 0 ); if (iResult == SOCKET_ERROR) { printf("send failed with error: %d\n", WSAGetLastError());... using CryptoPP::HexEncoder; 14 using CryptoPP::HexDecoder; #include "filters.h" using CryptoPP::StringSink; using CryptoPP::StringSource; using CryptoPP::StreamTransformationFilter; #include "idea. h" using CryptoPP: :IDEA; #include "modes.h" using CryptoPP::CBC_Mode; #include "secblock.h" using CryptoPP::SecByteBlock; // Need to link with Ws2_32.lib, Mswsock.lib, and Advapi32.lib #pragma comment (lib, "Ws2_32.lib") ... modulo đơn giản sử dụng lặp lại nhiều lần IV Mó húa v gii mó IDEA Mó húa v gii mó IDEA IV.1 Mó húa Cu trỳc ca IDEA Giống nh sơ đồ mã hóa khác, hàm mã hóa có tham số đầu vào rõ cần mã khóa Trong trừơng... chủ yếu việc xây dựng phần mềm: + Sử dụng khối nhỏ: phép toán mã thực khối có độ dài 8, 16, 32 bit phù hợp với việc xử lý máy tính + Sử dụng thuật toán giản đơn: Phép toán mã dễ dàng lập trình... pháp vét cạn khóa - Độ phức tạp : Bản mã phải phụ thuộc cách phức tạp vào rõ khóa Mục tiêu đặt phải làm phức tạp hóa phụ thuộc mặt thống kê mã vào rõ IDEA đạt đợc điều nhờ việc sử dụng phép toán

Ngày đăng: 28/10/2015, 14:49

Từ khóa liên quan

Mục lục

  • V. Phần mềm thử nghiệm

    • V.1. Client

    • V.2. Server

    • V.3. Thử nghiệm chương trình

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan