Mã hoá DES:

Một phần của tài liệu Ứng dụng mô hình an toàn thông tin và bảo mật thư điện tử (Trang 58)

Phần mô tả sau đây lƣợc bỏ những chi tiết cụ thể về quá trình chuyển

đổi và hoán vị của thuật toán. Những thông tin chính xác có thể đƣợc xem thêm tại mục 2.2.3

50

Cấu trúc tổng thể của thuật toán đƣợc thể hiện ở Hình 4.4 có 16 chu trình giống nhau trong quá trình xử lý. Ngoài ra còn có hai lần hoán vị đầu và cuối (Initial and final permutation - IP & FP). Hai quá trình này có tính chất đối nhau (Trong quá trình mã hóa thì IP trƣớc FP, khi giải mã thì ngƣợc lại). IP và FP không có vai trò xét về mật mã học và việc sử dụng chúng chỉ có ý nghĩa đáp ứng cho quá trình đƣa thông tin vào và lấy thông tin ra từ các khối phần cứng có từ thập niên 1970. Trƣớc khi đi vào 16 chu trình chính, khối thông tin 64 bit đƣợc tách làm hai phần 32 bit và mỗi phần sẽ đƣợc xử lý tuần tự (quá trình này còn đƣợc gọi là mạng Feistel).

Cấu trúc của thuật toán (mạng Feistel) đảm bảo rằng quá trình mã hóa và giải mã diễn ra tƣơng tự. Điểm khác nhau chỉ ở chỗ các khóa con đƣợc sử dụng theo trình tự ngƣợc nhau. Điều này giúp cho việc thực hiện thuật toán trở nên đơn giản, đặc biệt là khi thực hiện bằng phần cứng.

b) Sơ đồ thuật toán:

DES thực hiện trên từng block bản gốc. Sau khi thực hiện hoán vị khởi đầu (Initial Permutation – IP) khối dữ liệu đƣợc chia làm hai nửa trái và phải, mỗi nửa 32 bit. Quá trình đƣợc lặp lại qua 16 vòng, mỗi vòng là một hàm f. Sau 16 vòng lặp, hai nửa trái và phải đƣợc kết hợp lại và thực hiện hoán vị cuối cùng (hoán vị ngƣợc – Inverse Initial Permutation) để kết thúc thuật toán.

DES là thuật toán mã hóa khối, nó xử lý từng khối thông tin của bản rõ có độ dài xác định là 64 bit. Trƣớc khi đi vào 16 chu trình chính, khối dữ liệu cần bảo mật đƣợc ―bẻ‖ ra từng khối 64 bit, và từng khối 64 bit này sẽ đƣợc lần lƣợt đƣa vào 16 vòng mã hóa DES để thực hiện:

Input: bản rõ M = m1m2… m64, là một khối 64 bit, khóa 64 bit K = k1k2...k64 (bao gồm cả 8 bit chẵn lẻ, việc thêm bit chẵn lẻ sao cho các đoạn khóa 8 bit có số bit 1 là lẻ)

51 .

Hình 4.3: Sơ đồ hoạt động của DES Output: bản mã 64 bit C = c1 c2 …c64

1. Sinh khóa con. Tính các khóa con theo thuật toán sinh khóa con

2. (L0,R0) IP (m1 m2 . . . m64) (sử dụng bản hoán vị IP để hoán vị các bit, kết quả nhận đƣợc chia thành 2 nửa là L0 = m58m50 . . . m8, R0 = m57m49 . . . m7)

3. Với i chạy từ i=1 đến 16 thực hiện: Tính các Li và Ri theo công thức: Li=Ri-1;

Ri=Li-1 f(Ri-1) trong đó f ( Ri-1, Ki )=P ( S ( E ( Ri-1 ) Ki ) );

f f f f INPUT INPUT L0 L0 INITIAL PERMUTATION INITIAL PERMUTATION R0 R0 L1=R0 L1=R0 R1=L0 f(R,K0)1 R1=L0(+)f(R,K0)1 f f L2=R1 L2=R1 R2=L1 f(R,K1)2 R2=L1(+)f(R,K1)2 f f L16=R15 R2=L15(+)f(R,K15)16 R16=L15 f(R15K16) L16=R15 INVERSE INITIAL PERMUTATION

INITIAL PERMUTATION OUTPUT

OUTPUT L15=R14 L15=R14 R15=L14 f(R,K14)15 R15=L14(+)f(R,K14)15 K1 K2 KN K16    

52

Việc tính f ( Ri-1 ) = P ( S ( E (Ri-1) Ki ) ) đƣợc thực hiện nhƣ sau:

Mở rộng Ri-1 = r1r2 . .. r32 từ 32 bit thành 48 bit bằng cách sử dụng hoán vị mở rộng E.

T E ( Ri-1 ) . ( Vì thế T = r32 r1 r2 . . . r32 r1)

T’ T Ki. Biểu diễn T’ nhƣ là các xâu gồm 8 ký tự 6 bit T’ = ( B1, . . . ,B8 )

T’’ ( S1 ( B1 ) , S2 ( B2 ) , . . . , S8 ( B8 ) ). Trong đó Si (Bi) ánh xạ b1b2...b6 thành các xâu 4 bit của phần tử thuộc hàng r và cột c của các bảng Si (S box) trong đó: r = 2 *b1 + b6 và c = b2 b3 b4 b5 là một số nhị phân từ 0 tới 15. Chẳng hạn S1 (011011) sẽ cho r = 1 và c = 3 và kết quả là 5 biểu diễn dƣới dạng nhị phân là 0101.

T’’’ P ( T’’) trong đó P là hoán vị cố định để hoán vị 32 bit của T’’ = t1 t2 . . . t32 sinh ra t16 t7 . . . t25. Khối từ b1 b2 . . . b64 ( R16, L16) (đổi vị trí các khối cuối cùng L16, R16)

5. C IP-1 ( b b . . . b ) ( Biến đổi sử dụng IP-1, C = b b . . . b ).

c) Hàm cơ bản: Mỗi vòng của DES đƣợc thực hiện theo các bƣớc sau:

S1 S2 S3 S4 S5 S6 S7 S8

Hình 4.4: Hàm F (F-funtion) dùng trong DES

48 BITS 48 BITS 32 BITS 32 BITS P R (32 BITS) R(32 BITS) Subkey (48 BITS) K (48 BITS)  E (adsbygoogle = window.adsbygoogle || []).push({});

53

d) Giao diện:

Giao diện bao gồm các Textbox cho phép chọn file cần mã hoá và 2 nút button để tạo mã hoá và giải mã

Hình 4.5 : Giao diện mã hoá file DES, tripDES e) Kết quả:

Hình 4.6 : Chƣơng trình mã hoá file DES, tripDES 4.1.3. Mã hoá – giải mã RSA

a) Mô tả :

Thuật toán RSA có hai khóa: khóa công khai (hay khóa công cộng) và khóa bí mật (hay khóa cá nhân). Mỗi khóa là những số cố định sử dụng trong quá trình

Local file New file Local file New file Encrypted Decrypted Encrypt/Decrypt

54

mã hóa và giải mã. Khóa công khai đƣợc công bố rộng rãi cho mọi ngƣời và đƣợc dùng để mã hóa. Những thông tin đƣợc mã hóa bằng khóa công khai chỉ có thể đƣợc giải mã bằng khóa bí mật tƣơng ứng. Nói cách khác, mọi ngƣời đều có thể mã hóa nhƣng chỉ có ngƣời biết khóa cá nhân (bí mật) mới có thể giải mã đƣợc.

Ví dụ: Ta có thể mô phỏng trực quan một hệ mật mã khoá công khai nhƣ sau: Bob muốn gửi cho Alice một thông tin mật mà Bob muốn duy nhất Alice có thể đọc đƣợc. Để làm đƣợc điều này, Alice gửi cho Bob một chiếc hộp có khóa đã mở sẵn và giữ lại chìa khóa. Bob nhận chiếc hộp, cho vào đó một tờ giấy viết thƣ bình thƣờng và khóa lại (nhƣ loại khoá thông thƣờng chỉ cần sập chốt lại, sau khi sập chốt khóa ngay cả Bob cũng không thể mở lại đƣợc-không đọc lại hay sửa thông tin trong thƣ đƣợc nữa). Sau đó Bob gửi chiếc hộp lại cho Alice. Alice mở hộp với chìa khóa của mình và đọc thông tin trong thƣ. Trong ví dụ này, chiếc hộp với khóa mở đóng vai trò khóa công khai, chiếc chìa khóa chính là khóa bí mật.

b) Sơ đồ thuật toán:

Hình 4.7. Sơ đồ khối quá trình sinh khóa RSA

Chọn p và q Tính n=pxq Tính Ƴ(n) Chọn khóa KB Chọn khóa KB C = PKB(mod N) P = CkB(mod N) KB kB Bản rõ P Bản mã C P Bản rõ gốc P

55

c) Hàm cơ bản:

 Một số hàm trong C#:

oHàm khởi tạo số nguyên lớn từ một chuỗi

BigInteger(string s, int radix);

Với s là chuỗi số nguyên lớn và radix là hệ cơ số (chẳng hạn 10 => hệ thập phân)

Ví dụ:

BigInteger k = new BigInteger(―123456‖, 10); //k=123456  Hàm sinh ngẫu nhiên một số nguyên tố lớn

static BigInteger genPseudoPrime(int bits, int confidence, Random rand); /*Sinh ngẫu nhiên một số nguyên tố lớn có số bit là bits, độ tin cậy của thuật toán xác suất kiểm tra số nguyên tố Rabin Miller là confidence và độ ngẫu nhiên là rand.*/

//Ví dụ: sinh ngẫu nhiên số nguyên tố có 512 bits, độ tin cậy là 50. BigInteger p = BigInteger.genPseudoPrime(512, 50, new Random());  Hàm tính ƣớc số chung lớn nhất

public BigInteger GCD (BigInteger bi)

//Tính ƣớc số chung lớn nhất của hai số nguyên k và phi k.GCD(phi);

Hàm tính phần tử ngƣợc

public BigInteger modInverse(BigInteger modulus) //Tìm d là phần tử ngƣợc của e trên vành số nguyên phi d = e.modInverse(phi);

Hàm tính am mod n

public BigInteger modPow(BigInteger exp, BigInteger n) //Tìm m = m^e mod n (adsbygoogle = window.adsbygoogle || []).push({});

56

d) Giao diện:

Hình 4.8. Giao diện mã hoá và giải mã file e) Kết quả:

Hình 4.9. Chƣơng trình mã hoá và giải mã file 4.2. Triển khai ứng dụng

4.2.1. Mô tả các chức năng: a) Đăng nhập: a) Đăng nhập:

Hộp thoại đăng nhập sẽ cho phép ngƣời dùng gõ tài khoản, mật khẩu, chọn máy chủ kết nối và cổng kết nối nào. Nếu đăng nhập thành công sẽ bƣớc vào giao diện chính.

b) Mô hình gửi thƣ và xác thực ngƣời dùng:

SMTP Public Key Private Key Encryption RSA Decryption Browse Browse Source file nguồn Browse

57

Hình dƣới đây cho thấy một thực hiện đơn giản Simple Mail Transfer Protocol (SMTP) đƣợc định nghĩa trong RFC 821. Mục tiêu của SMTP là để chuyển email đáng tin cậy và hiệu quả. SMTP là độc lập với hệ thống phụ truyền cụ thể và chỉ yêu cầu một lệnh kênh luồng dữ liệu đáng tin cậy. Ở đây chúng tôi sử dụng giao thức TCP / IP chỉ để phân phối tin nhắn.

Các giao thức sử dụng các ký tự ASCII 7-bit. Nếu lớp vận chuyển cung cấp một kênh truyền tải 8-bit, sau đó MSB đƣợc thiết lập để không và sử dụng

Hình 4.10: Mô hình cho ngƣời dùng SMTP (RFC)

POP3:

Các phƣơng pháp thông thƣờng ủy quyền bằng POP3 là một tiêu chuẩn " tên ngƣời dùng / mật khẩu" đăng nhập. Điều này là khá nhiều giống với cách đăng nhập đƣợc thực hiện trong FTP; thậm chí các lệnh đều giống nhau

Hình 4.11: Mô hình quy trình xác thực ngƣời dùng POP3 (RFC) 1. Establish TCP

connection To server 3. Receive “Ready” Reply, Send User name

5. Receive Reply, Send Password

7. Receive “Greeting” Reply, Transition to TRANSACTION state

2. Establish TCP connection, Send +OK “Ready” Reply

4. Receive User Name, Send +OK Reply 6. Receive Password, Send +OK “Greeting” Reply With number of Inbox Messages

POP3 Client POP3 Server

User File System Sender- SMTP Receiver SMTP- File System SMTP Commands/Replies And Mail

58

Trƣớc hết ngƣới dùng vào lệnh USER của ngƣời dùng cùng với tên hộp thƣ ngƣời nhận. Các máy chủ đáp ứng với một sự thừa nhận trung gian. Ngƣời dùng sau đó sử dụng lệnh PASS để gửi mật khẩu của ngƣời nhận. Giả sử tên đăng nhập là hợp lệ, máy chủ đáp ứng cho ngƣời sử dụng với một sự thừa nhận rằng chỉ xác thực thành công . Các phản ứng cũng thƣờng sẽ xác định số lƣợng tin nhắn đang chờ cho ngƣời sử dụng trong hộp thƣ. Quá trình này đƣợc minh họa trong hình 4.11.

POP3 & SMTP:

Hình 4.12: Mô hình cho ngƣời dùng SMTP/POP3

 Ngƣời sử dụng soạn một e -mail sử dụng một ứng dụng gọi là một ủy thác ngƣời dùng mail (MUA) hoặc e-mail client

 Khách hàng gửi e -mail đến một máy chủ sử dụng đơn giản SMTP và nhận e -mail sử dụng POP3  SMTP sử dụng cổng TCP 25  POP sử dụng cổng UDP 110 SMTP Protocol POP Protocol POP/SMTP Server Get E-mail Send E-mail Client Mail User Agent

59

4.2.2. Cài đặt giao diện và phƣơng pháp mã hoá: a) Đăng nhập: a) Đăng nhập: (adsbygoogle = window.adsbygoogle || []).push({});

Hình 4.13: Giao đăng nhập b) Gửi mail:

Hình 4.14: Giao diện send mail mã hoá

- Chức năng gửi thƣ thông thƣờng không mã hóa: Cách thức gửi thƣ cũng giống với các chƣơng trình khác, điền các thông tin nhƣ (To) địa chỉ ngƣời nhận, (BCC, CC)

thêm địa chỉ ngƣời nhận nhập nội dung thƣ rồi chọn

- Chức năng gửi mã hoá: Sau khi nhập thông tin ngƣời dùng nháy nút Add để thêm file mã hóa khi đó sẽ có tên tệp trong hộp thoại Attachments. Để mã hoá nội dung

Body và file nháy nút Button sẽ chuyển sang

60

hóa sau đó nhấn nút Send gửi đi. Ngƣời nhận cần có key hoặc phƣơng thức mã hóa để có thể đọc đƣợc nội dung

Sau khi gửi thƣ thành công nháy nút để thoát

c) Phƣơng pháp mã hóa:

Bƣớc 1. Mã hóa File:

Ở đây tôi sử dụng DESCryptoServiceProvider với không gian tên là System.Security.Cryptographic trong Microsoft .NET Framework.

Tạo khóa: Tạo một khóa bí mật mã hóa và giải mã dữ liệu.

DESCryptoServiceProvider dựa trên một thuật toán mã hóa đối xứng. Mã hóa đối xứng cần một khóa và một véc-tơ khởi tạo (IV) để mã hóa dữ liệu. Để giải mã dữ liệu, bạn phải có cùng khoá và IV cùng. Bạn cũng phải sử dụng các thuật toán mã hóa tƣơng tự. Bạn có thể tạo các khoá bằng cách sử dụng một trong các phƣơng pháp sau:

Phƣơng pháp 1: Bạn có thể nhắc ngƣời dùng mật khẩu. Sau đó, sử dụng mật khẩu chính và các IV.

Phƣơng pháp 2: Khi bạn tạo một phiên bản mới của mật mã hoá lớp đối xứng, khoá mới và IV đƣợc tự động tạo ra cho phiên bản. Sử dụng phím và IV đƣợc tạo bởi quản lý đối xứng mã lớp mã hóa và giải mã tệp.

Bƣớc 2. Mã Hóa Message: Sử dụng DESCryptoServiceProvider trong thƣ viện mscorlib.dll.của Microsoft.

61

d) Nhận thƣ

Cho phép ngƣời dùng có thể nhận email về từ các Mail server, với phƣơng thức nhận POP3. Để nhận đƣợc mail cần khai báo máy chủ POP3/SMTP, cổng máy chủ POP3/SMTP sau đó gõ tên đăng nhập và mật khẩu của ngƣời dùng, sau khi gõ xong nháy vào nút Login (đăng nhập), chƣơng trình sẽ thiết lập kết nối đến máy chủ POP3/SMTP và tải dữ liệu Email trong thƣ mục Inbox của ngƣời dùng về. Hình 4.15 là kết quả khi chạy chƣơng trình kết nối đến máy chủ POP của máy chủ Gmail.

Hình 4.15: Giao diện kết quả nhận thƣ 4.3. Kết luận:

Trong chƣơng IV thực hiện hai công việc công việc đầu tiên là mô tả các thao tác cài đặt một số thuật thuật toán mã hoá thƣờng sử dụng trong bảo mật thƣ điện tử nhƣ DES trong mã hoá bí mật và RSA trong mã hoá công khai,

Việc thứ hai triển khai ứng dụng gửi thƣ điện tử/nhận thƣ điện tử trên ngôn ngữ lập trình C#

62

KẾT LUẬN

Công nghệ thông tin và truyền thông đóng vai trò ngày càng quan trọng trong cuộc sống hàng ngày của con ngƣời, làm biến đổi sâu sắc cách thức làm việc, giải trí, các nguyên tắc tiến hành kinh doanh,… Vì vậy để đảm bảo an toàn thông tin cần phải tìm hiểu, nghiên cứu các nguy cơ mất an toàn thông tin nhƣ: nguy cơ về vật lý, về phầm mềm độc hại,…và sử dụng các biện pháp bảo vệ hệ thống thông tin một cách an toàn nhƣ: sử dụng các chính sách, các kỹ thuật an toàn thông tin và các phần mềm mã hoá - giải mã và gửi thƣ điện tử.

Sau một năm thực hiện, luận văn đã hoàn thành và đạt đƣợc một số kết quả và đƣa ra phƣơng hƣớng phát triển sau đây:

Kết quả đạt đƣợc: Luận văn tập trung xem xét một số vấn đề về kỹ thuật mã hoá và giải mã văn bản, với một số kỹ thuật đi kèm nhƣ DES, RSA, các hàm băm, … Một số kết quả luận văn đã đạt đƣợc:

• Những khái niệm, phân tích các mô hình ATTT, đặc điểm cơ bản của một hệ thống PKI. Ứng dụng của hạ tầng khóa bí mật và công khai trong thƣơng mại điện tử. Tƣ tƣởng của thuật toán cấp phát khóa, sinh, mã hoá rồi giải mã (RSA, DES,…), chỉ rõ ƣu nhƣợc điểm của từng thuật toán, định nghĩa và đặc tính của hàm băm.

• Xây dựng một ứng dụng mã hoá Body message và file dữ liệu text có cấu trúc dùng để gửi thƣ điện tử. Nhằm phục vụ cho nhu cầu gửi thƣ an toàn bảo mật. Điều này đã giúp cho ngƣời dùng giao dịch an toàn hơn trong trƣờng hợp nếu có kẻ tấn công vào truy cập email cũng khó giải mã đƣợc văn bản. (adsbygoogle = window.adsbygoogle || []).push({});

• Chƣơng trình gửi mail sử dụng máy chú SMTP, POP3,… nhƣng không lƣu trữ trong hòm thƣ của các phần mềm web gmail, thunderbird, zimbra,.. nên an toàn hơn nếu bị đánh cắp mật khẩu.

Hƣớng phát triển:

Sử dụng RSA để mã hóa một tập tin lớn không phải là một ý tƣởng tốt. Ta có thể ví dụ tạo ra một khoá AES ngẫu nhiên, mã hóa nó sử dụng RSA và lƣu trữ nó

Một phần của tài liệu Ứng dụng mô hình an toàn thông tin và bảo mật thư điện tử (Trang 58)