Tổng quan mã hóa

Màu nền
Font chữ
Font size
Chiều cao dòng

BLOCK CIPHERS

3-Way

Blowfish

CAST

CMEA

DES

Triple-DES

DEAL

FEAL

GOST

IDEA

LOKI

Lucifer

MacGuffin

MARS

MISTY

MMB

NewDES

RC2

RC5

RC6

REDOC

Rijndael

Safer

Serpent

SQUARE

Skipjack

Tiny Encryption Algorithm

Twofish

STREAM CIPHERS

ORYX

RC4

SEAL

Hiện tại, thông dụng và tiên tiến nhất, nếu xét về thuật toán sử dụng khoá đối xứng thì DES là một đại diện tiêu biểu, nếu xét về thuật toán sử dụng khoá công khai thì RSA & Diffie-Hellman là 2 đại diện tiêu biểu.

Về RSA, bạn có thể tham khảo thêm tại đây:

http://www.hvaonline.net/forum/index.php?showtopic=41004

Xét về độ an toàn, hiện nay 3DES (một cải tiến của DES) được đánh giá là có độ an toàn cao vì độ dài khoá của nó gấp 3 lần so với DES.

Hi darkprince,

Người ta không gọi MD5 là thuật toán mã hóa. MD5 được liệt vào dạng thuật toán băm (Hash Algorithm), nhằm mục đích bảo đảm tính toàn vẹn (integrity) của dữ liệu.

Hiện tại, MD5 và SHA-1 là các thuật toán băm được sử dụng rất phổ biến và có độ an toàn cao. Tuy nhiên, theo một thông tin mới đây thì SHA-1 đã bị chinh phục. Bạn có thể xem thêm tại đây để biết thêm chi tiết:

http://www.hvaonline.net/forum/index.php?showtopic=42037

Tôi xin góp ý theo hiểu biết của tôi:

- Hiện nay không thể thống kê hết các thuật toán mã hóa, mà chỉ có thể phân loại chúng.

- Thuật toán mã hóa được phân làm 2 loại: Mã hóa (thực chất là mã khóa) đối xứng và mã hóa công khai.

Mã hóa đối xứng: Mã khóa và giải mã cùng chung một khóa hay một thuật toán.

Ưu điểm: Có thể mã hóa dữ liệu trên nhiều tài nguyên

Nhược điểm: Cần phải chia sẻ khóa theo cơ chế an toàn.

Giới hạn số lượng người dùng.

Các thuật toán mã hóa cổ điển như: Các loại mã hóa thay thế(Substitution Cipher) gồm có:

Thay thế đơn (A simple substitution cipher)

Thay thế đồng âm (A homophonic substitution cipher)

Thay thế đa mẫu tự (A polyalphbetic substitution cipher):

Thay thê đa sơ đồ(A polygram substitution cipher):

Các hệ mã hóa đổi chỗ(Transposition cipher), Các hệ mã hóa đối xứng như ROT(13) trên Unix, Hệ mã hóa Caesar, vigenre

Và các loại mã hóa như prof đã nêu trên.........

Mã hóa công khai: Sử dụng cặp khóa Public key (để mã hóa) và Private Key (để giải mã)

Ví dụ: A cần mã hóa tài liệu và gửi cho B đọc.

A nhận Public key của B, dùng Public Key của B để mã hóa tài liệu

A Gửi tài liệu đã mã hóa cho B

B dùng Private key tương ứng của mình để giải mã tài liệu đó.

Ưu điểm: Hiệu quả trong truyền thông phân tán

Nhược điểm: Tốc độ mã hóa chậm

Một ứng dụng cơ bản là chữ ký số, các dịch vụ chứng thực sử dụng hệ mã khóa công khai (PKI).

Trên đây là một số ý cơ bản về mã hóa. Tôi sẽ trình bày về PKI trong lần sau.

Nói thêm: một block cipher ở chế độ vận hành cơ bản (ECB) mã hóa cụm rõ x thành cụm mã y nhờ khóa z:

y = ENCRYPT(z, x)

Tuy nhiên, khi chạy ở chế độ output feedback (OFB):

s = ENCRYPT(z, s[i-1])

hoặc chế độ counter (CTR):

s = ENCRYPT(z, i)

ta thu được chuỗi số tựa ngẫu nhiên s[] có thể dùng để mã hóa:

y = x xor s

Như vậy có thể dễ dàng biến một block cipher thành một stream cipher. Đó là lý do tại sao việc thiết kế và phân tích block cipher được quan tâm hơn và số lượng thuật toán nhiều hơn.

Trong danh sách của prof, alice xin chọn ra vài thuật toán đáng chú ý --- về mặt cấu tạo, độ bền, tốc độ:

DES. Về cấu tạo, đây là một thuật toán đại diện tiêu biểu của cái gọi là "kết cấu Feistel" -- cụm dữ liệu 64 bit được chia làm hai nửa L, R và dùng nửa này kết hợp với khóa để mã hóa nửa kia:

L := L xor f(K, R)

LR := RL

Trong đó hàm f() hợp thành từ các phép thế và hoán vị, K là một "khóa con" 48 bit chọn từ khóa z, kết hợp với dữ liệu R nhờ một phép xor. Động tác trên thực hiện lặp 16 lần -- thường được gọi là 16 "vòng" (rounds). Sau mỗi vòng z cũng được hoán vị để khóa con K của các vòng đều có thể khác nhau. (Việc tạo ra bộ các khóa con K từ khóa chính z được gọi là "phát triển khóa" -- key expansion.) Kết cấu Feistel có ưu điểm là một hàm có thể dùng làm cả hai việc -- mã hóa và giải mã, cũng đảm bảo rằng tấn công theo cả hai chiều -- từ bản mã hay từ bản rõ -- đều khó như nhau.

Về độ bền, là một chuẩn quốc gia (về sau đã trở thành chuẩn quốc tế), DES đã được cộng đồng bảo mật phân tích rất kỹ. DES có khóa 56 bit, nhưng do tính chất không đáng mong muốn sau đây, gọi là "complementarity":

ENCRYPT(z, x) = not ENCRYPT(not z, not x)

cho nên độ bền bị mất 1 bit, còn 55 bit. Ngoài ra, DES đã bị bẻ gãy bởi phương pháp thám mã vi sai (differential crytanalysis) với thời gian 2**47 và thám mã tuyến tính (linear crytanalysis) với thời gian 2**43 nên độ bền thực tế hiện nay có thể xem là 43 bit.

Về tốc độ, DES được thiết kế cho phần cứng nên khi cài đặt bằng phần mềm thì... hơi bị khó. Muốn cài đặt tốt phải tận dụng độ dài register của CPU (đến 64 bit). Một cài đặt tốt trên CPU 486DX4 100MHz (sic) chạy Linux cho tốc độ mã hóa ~500 KB/s. Ta sẽ dùng DES làm đơn vị tốc độ để so sánh các thuật toán.

CAST và Blowfish. Cả hai đều có 16 vòng, cấu tạo rất giống DES, chỉ khác hàm f phức tạp hơn. CASH sử dụng một hàm f cố định với nhiều phép tính còn Blowfish sử dụng một hàm f rất ít phép tính nhưng được lại được dẫn xuất từ khóa qua một quá trình setup dài dòng.

Độ bền: cả hai đều có khóa dài hơn DES (CAST có khóa 128 bit, Blowfish có khóa 256 bit). Hiện nay chưa có ai bẻ gãy được chúng. Kết cấu phức tạp khiến cho không ai kể cả chính tác giả của chúng muốn phân tích chúng một cách nghiêm túc. Trong bài giải trình thiết kế của CAST, các tác giả đã "chứng minh" một công thức về độ bền dựa trên một giả thuyết nặng cảm tính. Giả thuyết đó chưa bao giờ được chứng minh.

Tốc độ: Hai thuật toán này hướng tới cài đặt bằng phần mềm, khai thác CPU 32 bit. Tốc độ cao là lý do khiến chúng được yêu thích. Tốc độ CAST = 1,5 DES và Blowfish = 2,5 DES.

GOST. Cấu tạo cũng rất giống DES, nhưng hàm f đơn giản rất dễ thực hiện bằng phần mềm.

Độ bền: Dù cấu tạo vòng đơn giản, thuật toán có đến 32 vòng lặp thay vì 16 vòng như DES. Số vòng đảm bảo cho thuật toán độ bền tương xứng với độ dài khóa (256 bit).

Tốc độ: GOST được thiết kế hướng tới CPU 32 bit. Thời gian thực hiện một vòng của nó cũng tương tự như Blowfish. Xuất xứ Soviet có thể là lý do khiến cho thuật toán không được sử dụng rộng rãi ngoài lãnh thổ Nga và vài nước lân cận. Tốc độ GOST = 1,5 DES.

SAFER. Nét đẹp và độc đáo của thuật toán này là cách kết hợp hai byte dữ liệu với nhau nhờ phép cộng mod 256:

A := A + B

B := B + A

Trong mỗi vòng, nhờ 12 cặp lệnh như vậy, 8 byte dữ liệu được kết hợp với nhau sao cho bất cứ byte nào ở đầu ra cũng phụ thuộc vào mọi byte đầu vào. Kết cấu này được gọi là phép biến đổi tựa Hadamard (PHT).

Độ bền: Thuật toán có 4 phiên bản khác nhau là K64 (6 vòng), K128 (8 vòng), SK64 (8 vòng) và SK128 (10 vòng), trong đó 64 và 128 là độ dài khóa, K và SK ký hiệu thuật phát triển khóa. Nhờ thuật phát triển khóa và số vòng, SK mạnh hơn K. Thiết kế đơn giản, đẹp mắt đã làm thuật toán được phân tích kỹ và kết quả phân tích đã giúp cải tiến phiên bản K thành SK, nhưng không đủ sức bẻ gãy ngay cả phiên bản yếu nhất (K64).

Tốc độ: thiết kế hướng tới CPU 8 bit và 16 bit, không khai thác được khả năng của CPU 32 bit, trên đó phiên bản SK64 có tốc độ 0,8 DES.

IDEA. Thuật toán mã hóa cụm mã 64 bit, chia thành 4 cụm nhỏ 16 bit. Đặc trưng của thuật toán này là khuấy trộn khóa với dữ liệu nhờ 3 phép tính không tương thích với nhau trên những nhóm có cùng số phần tử (2**16) là: phép nhân mod (2**16+1), phép cộng mod 2**16 và phép xor 16 bit. Tính không tương thích này nhằm mục đích làm dữ liệu ra phụ thuộc vào dữ liệu vào và khóa một cách cực kỳ rắc rối.

Thuật toán này rất đẹp và có một kết cấu phảng phất những nét tương tự kết cấu Feistel: mã hóa và giải mã là hai quá trình giống nhau đến mức có thể dùng chung một mã nguồn.

T := f(K, L xor R)

L := L xor T

R := R xor T

IDEA được thiết kế trong thời kỳ phương pháp thám mã vi sai đang được nghiên cứu tích cực. Các tác giả của IDEA sử dụng lý thuyết chuỗi Markov để xây dựng một mô hình khuyếch tán vi sai cho các mật mã nhiều vòng. Từ đó họ đã đề ra một nguyên lý thiết kế mới, gọi là "ma trận vi sai bất đối xứng". IDEA là một sản phẩm tuân theo nguyên lý đó.

Độ bền: IDEA có khóa 128 bit. Kết cấu đẹp đã tạo điều kiện phân tích khá rõ ràng bằng phương pháp thám mã vi sai đương thời và những phương pháp khác sau này. Những kết quả từng công bố đều cho thấy thuật toán đứng vững trước mọi phương pháp thám mã đã biết.

Ngành tư pháp Hoa Kỳ còn ghi nhận một vụ án buôn bán phim ảnh khiêu dâm trẻ em, trong đó cục điều tra liên bang (FBI) sau khi bắt tạm giam nghi phạm và tạm giữ máy vi tính của hắn, đã bó tay trước dữ liệu khả nghi, mã hóa bằng IDEA. Phil Zimmermann cũng từng gặp rắc rối với nhà chức trách Hoa Kỳ vì đã "dám cả gan" đưa IDEA vào phần mềm Pretty Good Privacy (PGP) nổi tiếng của ông.

Tốc độ: thiết kế cho CPU 16 bit, IDEA không khai thác tốt lắm các khả năng của CPU 32 bit. Phép nhân mod (2**32+1) không tạo thành nhóm, vì vậy việc mở rộng thuật toán với cụm mã 128 bit để tận dụng khả năng của CPU 32 bit là không thể được. Tốc độ IDEA = 0,8 DES.

Skipjack. Cũng như IDEA, Skipjack mã hóa cụm mã 64 bit trên 4 cụm nhỏ 16 bit. Kết cấu trộn khóa 32 bit vào cụm nhỏ 16 bit là một kết cấu Feistel với 4 vòng:

L := L xor f(K0 xor R)

R := R xor f(K1 xor L)

L := L xor f(K2 xor R)

R := R xor f(K3 xor L)

Trong đó f là một phép thế 1-1, tức là một hàm có hàm ngược, giống như f của GOST. (Hàm f của DES, CAST và Blowfish không phải là hàm 1-1.)

Kết cấu trộn các cụm nhỏ 16 bit vào nhau thường được biết đến với tên gọi "thanh ghi hồi tiếp chuyển dịch tuyến tính (linear shift feedback register, LSFR). Thanh ghi này có thể hoạt động theo một trong hai qui tắc:

Qui tắc A: (x3, x2, x1, x0) := (x0, x3, x2, x1 xor x0)

Qui tắc B: (x3, x2, x1, x0) := (x0, x3 xor x0, x2, x1)

Thuật toán có 32 vòng và cứ sau 8 vòng thì đổi qui tắc. Chỉ có hai qui tắc mà sinh ra hàng chục kết cấu khác nhau, nhờ vậy Skipjack mặc dù có nhiều vòng nhưng các đặc tuyến của nó không có tính lặp. Điểm độc đáo nhất của thuật toán này là cấu trúc phân thành hai lớp: vỏ (wrapper), gồm 8 vòng đầu và 8 vòng cuối, khuyếch tán rất nhanh, và lõi (core), gồm 16 vòng giữa, khuyếch tán rất chậm. Cấu trúc phân lớp này về sau cũng được áp dụng ở IBM khi thiết kế thuật toán MARS.

Cũng như DES, ở Skipjack mã hóa và giải mã là hai quá trình giống nhau đến mức có thể dùng chung một mã nguồn và đảm bảo phá khóa theo cả hai chiều đều khó như nhau.

Độ bền: Skipjack có khóa 80 bit. Với một số lượng kết cấu phong phú, nhưng đều là những kết cấu cổ điển đã được nhiều thế hệ nghiên cứu, nó có thể được phân tích kỹ một cách nhanh chóng sau khi được cục an ninh quốc gia (NSA) công bố vào năm 1998. Mọi phương pháp thám mã đã biết đều không bẻ gãy được thuật toán này.

Tốc độ: Skipjack được thiết kế cho CPU 8 bit và 16 bit, không khai thác được khả năng CPU 32 bit. Có thể mở rộng thuật toán cho cụm mã 128 bit và khóa 160 bit nhằm tận dụng tối đa CPU 32 bit, nhưng việc này không dễ. Tốc độ Skipjack = 1,75 DES.

RC5. Điểm nổi bật của thuật toán này là phép xoay (tức phép hoán vị vòng quanh các bit của một biến dữ liệu) lệ thuộc dữ liệu. Kết cấu của thuật toán này cũng có nét giống như DES, nhưng dùng toàn các phép tính 32 bit:

L := ((L xor R) <<< R) + K

LR := RL

Trong đó + ký hiệu phép cộng mod 2**32 và a <<< b ký hiệu phép xoay dùng 5 bit thấp của b xác định góc xoay.

Độ bền: RC5 được đề xuất với 24 vòng, nhưng những phân tích về sau đã cho thấy 32 vòng là tối thiểu để chịu được thám mã vi phân. Phép xoay lệ thuộc dữ liệu là một kết cấu mới mẻ trong mật mã học. Những tính chất của nó có thể chưa được hiểu thấu đáo. Tuy nhiên, 7 năm gần đây không thấy xuất hiện kết quả thám mã nào mạnh hơn có thể bẻ gãy được 32 vòng.

Tốc độ: Danh bất hư truyền. Các thuật toán của R. Rivest (RCx và MDx) đều có tiếng là nhanh. Với 32 vòng, tốc độ RC5 = 6 DES.

3DES (Tripple-DES). Trước khi có AES, đây là thuật toán được sử dụng rộng rãi nhất. Ngoài chuyện đó ra nó chẳng có gì đặc sắc. Về cấu tạo, 3DES nghĩa là dùng 3 lần DES (mã hóa, giải mã, rồi lại mã hóa) bằng các khóa khác nhau. Về độ bền, thuật toán có khóa 3*56 = 168 bit, nhưng độ bền thực tế chỉ có 2*56 = 112 bit. Về tốc độ, 3 DES = 0,33 DES.

Nếu chỉ dùng một khóa duy nhất, một mật mã cụm với kích thước cụm n bit có thể bảo mật được 2**n cụm dữ liệu. (Nhiều tác giả còn khó tính hơn, cho rằng muốn chắc ăn nhất chỉ nên mã hóa 2**(n/2) cụm sau đó phải thay đổi khóa.) Với lượng dữ liệu cần mã hóa càng ngày càng lớn, thế hệ mật mã cụm 64 bit đang được thay thế dần bằng thế hệ mới -- mật mã cụm 128 bit.

Xin nêu 5 thuật toán thuộc loại này. Cả 5 thuật toán đều có điểm chung là:

- Kích thước cụm 128 bit.

- Có ít nhất 3 phiên bản ứng với với các độ dài khóa 128, 192 và 256 bit.

- Chưa từng bị bẻ gãy.

- Thích hợp cho CPU 32 bit, trên đó chúng đạt tốc độ ít nhất 2 DES.

MARS. Thuật toán này là một món "tả pí lù" các phép tính 32 bit từ xor, cộng, trừ, nhân, xoay, dịch tới memory lookup. Kết cấu phức tạp đến mức ngay cả nhóm thiết kế đông đảo gồm hơn chục tác giả (thuộc về hãng IBM, nơi chế ra DES) cũng không thể phân tích đứa con đẻ của mình một cách rành rọt được. Chẳng nên lấy làm lạ khi biết rằng nó là thuật toán ít được khảo sát nhất trong số 5 thuật toán 128bit giới thiệu ở đây. Ở một mật mã nhiều vòng, khi chống đỡ một cuộc tấn công thám mã, các vòng đầu và các vòng cuối (lớp vỏ) đóng vai trò khác với các vòng giữa (lớp lõi). Vì thế các tác giả cho rằng để thích ứng với vai trò của mình hai lớp này cần phải có kết cấu khác nhau và đó là điểm đáng ghi nhận nhất ở thuật toán này.

Twofish. Cách nào nhanh nhất trộn u1, u2 vào nhau để thu được v1, v2 sao cho mỗi v đều phụ thuộc mạnh vào u1 lẫn u2? Trên diễn đàn sci.crypt, khi đánh giá thuật toán SAFER (đã nói ở trên), B. Schneier đã viết như thế này: SAFER được thiết kế theo đơn đặt hàng của Cylink, mà Cylink thì lại ăn tiền bẩn của NSA. Vài năm sau đó, ông đã chép nguyên xi công thức trộn 2 khối dữ liệu từ SAFER vào thuật toán Twofish của mình.

RC6. Hàm f(x) = x * (2*x + 1) mod 2**32 là một hàm 1-1, thêm vào đó trong giá trị f(x), các bit càng cao càng mạnh, nghĩa là càng phụ thuộc rắc rối vào các bit của x. Hai đặc điểm này được R. Rivest khai thác triệt để, nhờ vậy đã giải quyết thành công bài toán hóc búa: cải tiến RC5 thành một thuật toán mới -- RC6 -- sao cho kích thước cụm tăng gấp đôi mà tốc độ không bị giảm.

Serpent. Một phép thế 4 bit thành 4 bit có thể thực hiện bằng một bảng giá trị nhỏ trong bộ nhớ, nhưng nếu coi nó như 4 hàm Boolean 4 biến cũng có thể thực hiện một cách hiệu quả bằng những công thức của đại số Boole (chỉ cần khoảng 15 phép tính như and, or, xor, not). Bài học vỡ lòng về mạch số này được các tác giả R. J. Anderson, E. Biham và L. R. Knudsen giảng lại qua thí dụ Serpent -- một thuật toán thực hiện song song 32 phép thế giống nhau trên một CPU 32 bit.

Những thuật ngữ cơ bản:

Trong thực tế, một người muốn gửi thông điệp tới người nhận và không muốn cho một người nào khác biết được nội dung của nó. Tuy nhiên sẽ xuất hiện trường hợp một người thứ 3 có thể mở được thông điệp hoặc nghe được cuộc gọi.

Trong thuật ngữ mã hoá, thông điệp được gọi là plaintext hay cleartext (tạm dịch là chữ thường). Mã hoá nội dung của thông điệp để che giấu đi nội dung của nó được gọi là thuật mã hoá. Thông điệp đã được mã hoá gọi là văn bản mã hoá (ciphertext). Quá trình lấy nội dung của ciphertext gọi là decryption (giải mã). Mã hoá và giải mã thường sử dụng một key (chìa khoá) và phương thức mã hoá mà quá trình giải mã chỉ có thể thực hiện được bởi người biết chìa khoá.

Thuật mã hoá là nghệ thuật hay khoa học để giữ cho thông điệp bí mật. Phá mã là nghệ thuật lấy nội dung văn bản mã hoá mà không cần đến chìa khoá. Người phá mã gọi là cryptographers và người mã hoá gọi là cryptanalysts.

Thuật mã hoá đi liền với các phương thức bảo mật thông tin, chứng thực, chữ ký điện tử, tiền tệ điện tử và các ứng dụng khác. Cryptology là một nhánh của toán học nghiên cứu về các phương thức mã hoá.

Các phương thức mã hoá cơ bản

Một phương thức mã hoá và giải mã được gọi là mật mã (cipher). Một vài phương thức mật mã dựa trên bí mật của thuật toán, những thuật toán này chỉ được chú ý về mặt lịch sử và không phù hợp với thực tại. Mộ thuật toán mã hoá hiện đại sử dụng một khoá để điều khiển quá trình mã hoá và giải mã, một thông điệp có thể được giải mã chỉ khi khoá giải mã đúng với khoá mã hoá.

Có 2 lớp của phương thức mã hoá là khoá đối xứng (khoá bí mật) và khoá không đối xứng (khoá public). Sự khác nhau là thuật toán đối xứng sử dụng cùng 1 khoá cho quá trình mã hoá và giải mã (hoặc khoá giải mã có thể nhận được dễ dàng từ khoá mã hoá), trong khi đó phương thức bất đối xứng sử dụng các khoá khác nhau cho quá trình mã hoá và giải mã, và khoá giải mã không thể nhận được từ khoá mã hoá.

Khoá đối xứng có thể chia thành stream cipher (mã dòng) và block cipher (mã cụm). Mã dòng có thể mã hoá một bit đơn của plaintext tại một thời điểm, trong khi đó mã cụm mã hoá một nhóm các bit (thường là 64 bit trong các phương thức mã hoá hiện đại) và mã hoá chúng chung lại thành một đơn vị đơn.

Mã hoá bất đối xứng (public) cho phép khoá mã được công khai (nó có thể được công bố trên báo), cho phép mọi người mã hoá với khoá này, trong đó chỉ có người nhận thực sự (người biết khoá giải mã) mới giải mã được thông điệp. Khoá mã được gọi là khoá chung (public) và khoá giải mã được gọi là khoá riêng (private) hay khoá bí mật (secret key).

Phương thức mã hóa hiện đại không còn sử dụng mã hoá bút và giấy. Các phương thức mã hoá mạnh được thiết kế để thực thi bởi các máy tính hoặc các thiết bị phần cứng đặc biệt. Trong hầu hết các phương thức mã hoá hiện đại, mã hoá được thực hiện bởi các phần mềm.

Thông thường mã hoá đối xứng thực thi nhanh hơn trên các máy tính so với mã hoá bất đối xứng. Trong thực tế chúng thường được sử dụng cùng nhau, trong đó khoá public được sử dụng để tạo nên khoá mã hoá ngẫu nhiên, và khoá ngẫu nhiên được dùng để mã hoá thông điệp thực sự sử dụng một thuật toán đối xứng. Đây thường được gọi là mã hoá lai.

Mô tả các thuật toán mã hoá là rất rộng và có thể tìm thấy được tại nhiều sách, thư viện khoa học, hoặc trên mạng Internet. Có lẽ phương thức mã hoá được nghiên cứu nhiều nhất và được dùng rộng rãi nhất là DES, phương thức liền kề AES có lẽ là sự thay thế tốt. RSA là phương thức nổi tiếng nhất.

Chữ kí điện tử:

Vài thuật mã hoá public có thể được dùng để tạo nên chữ kí điện tử. Một chữ kí điện tử là một lượng dữ liệu nhỏ được tạo ra sử dụng vài khoá bí mật, và có một khoá public được sử dụng để xem xét xem chữ kí đã thực sự được tạo ra sử dụng khoá bí mật tương ứng. Thuật toán sử dụng để tạo ra chữ kí phải thoả mãn yêu cầu rằng những người không biết khoá bí mật sẽ không thể tạo ra được chữ kí hợp lệ.

Chữ kí điện tử được sử dụng để xác nhận một thông điệp thực sự đến từ người gửi thực sự (thừa nhận rằng người gửi biết được khoá bí mật tương hợp với khoá public của anh/cô ta). Chúng có thể được sử dụng để định thời một tài liệu, một đối tác đáng tin cậy sẽ kí vào tài liệu và định thời với khoá bí mật của anh/cô ta, do đó chứng thực rằng tài liệu tồn tại trong thời gian nào đó.

Chữ kí điện tử có thể còn có thể được sử dụng để kiểm tra (hay xác nhận) một khoa public thuộc về một cá nhân nào đó. Điều này được thực hiện bởi tổ hợp khoá và thông tin về người sở hữu nó bởi một khoá đáng tin. Chữ kí điện tử bởi một đối tác thứ 3 (sở hữu khoá tin cậy), khoá công và thông tin về người sở hữu thường được gọi là chứng thực.

Lí do để tin tưởng vào khoá thứ 3 này có lẽ bởi nó được duyệt bởi một khoá đáng tin. Tại cấu trúc khoá trung tâm, có vài điểm gốc trong mạng tin cậy (ví dụ như các tổ chức chính phủ, và chung được gọi là nơi tạo ra chứng thực. Trong khi đó tại cấu trúc phân phối, không có các điểm gốc xác thực chung mà mỗi đơn vị sẽ có những điểm gốc xác thực riêng ( là các đối tác sở hữu các khoá và khoá duyệt bởi nó). Đây là khái niệm mạng tin cậy được sử dụng như trong PGP.

Một chữ kí điện tử của một tài liệu nhị phân được tạo ra bởi việc tính toán một cách có hệ thống thông điệp từ tài liệu, và tập hợp nó với thông tin về người kí, một timestamp. Chuỗi kết quả sau đó được mã hoá sử dụng khoá bí mật của người kí sử dụng một thuật toán thích hợp. Khối kết quả mã hoá bit là chữ kí, Nó thường được cung cấp cùng với thông tin về khoá public mà được sử dụng để kí nó. Để xác nhận một chữ kí, người nhận đầu tiên sẽ xem xét có đúng khoá thuộc về người mà thông điệp này gửi đi hay không (sử dụng mạng tin tưởng hoặc kiến thức trước đó), sau đó giải mã chữ kí sử dụng khoá public của người dung. Nếu chữ kí giải mã đúng và thông tin phù hợp với thông điệp thì chữ kí được chấp nhận.

Vài phương thức để tạo ra và xác thực chữ kí điện tử là miễn phí. Nổi tiếng nhất là RSA.

Các chức năng băm nhỏ mã hoá:

Các chức năng băm nhỏ mã hoá được sử dụng trong nhiều trường hợp, ví dụ như để tính toán trong việc sắp xếp các thông điệp khi tạo nên một chữ kí điện tử. Một hàm băm đưa các bit của thông điệp thành một giá trị băm có giá trị cố định. Một hàm băm sẽ làm cho việc tìm lại một thông điệp đã bị băm trở nên cực kì khó khăn.

Các chức năng băm nhỏ thường tạo ra các giá trị băm 128 bit trỏ lên. Con số 2 mũ 128 lớn hơn rất nhiều số lượng các thông điệp được trao đổi trên toàn cầu. Lí do tại sao lại cần thiết hơn 128 bit dựa trên birthday paradox. Birthday paradox chỉ ra rằng sự xắp xếp của 128 bit sẽ gấp đôi so với trường hợp mã hoá 64 bit. Việc bộ nhớ rẻ hơn khiến cho việc mã hoá lớn hơn 128 bit trở thành hiện thực như 160 bit hiện nay.

Rất nhiều thuật băm nhỏ là miễn phí. Thuật băm nhỏ miễn phí nổi tiếng nhất là họ MD, như MD4 và MD5. MD4 đã bị phá và MD5 mặc dù đang được dùng rộng rãi, cũng sẽ bị phá. SHA-1 và RipeMD-160 là những ví dụ tốt khi bạn muốn nghiên cứu về mã hoá.

Các phương thức tạo nên khoá mã hoá ngẫu nhiên:

Phương thức mã hoá ngẫu nhiên tạo nên các số ngẫu nhiên được sử dụng trong các ứng dụng mã hoá, ví dụ như các khoá. Các phương thức tạo nên số ngẫu nhiên trong các ứng dụng ngày nay không thể sử dụng để tạo nên số mã hoá ngẫu nhiên vì chúng chỉ tạo nên 1 con số ngẫu nhiên tĩnh, không thể chống lại được phương pháp đoán của những kẻ phá khoá).

Trong trường hợp tối ưu, các số ngẫu nhiên được dựa trên tài nguyên vật lí thực tế ngẫu nhiên mà không thể đoán được. Những nguồn này có thể là tín hiệu nhiễu trong một thiết bị bán dẫn, tín hiệu bit thấp nhất của một âm thanh đầu vào, hoặc thời gian trễ giữa các phiên ngắt của các thiết bị hoặc việc gõ bàn phím của người dùng. Nhiễu từ thiết bị vật lý sau đó được chế thành hàm băm để tạo nên sự lệ thuộc giữa các bit. Thường là một lượng lớn bit (vài nghìn bít) được sử dụng để tạo nên sự ngẫu nhiên, và trong một thuật toán mã hoá mạnh mỗi bít trong nhóm này lại phụ thuộc vào mỗi bit trong nhiễu đầu vào và mọi bit của nhóm.

Khi tính ngẫu nhiên vật lí không đảm bảo, số ngẫu nhiên giả được sử dụng. Trường hợp này có thể phiền phức, nhưng thường được dùng trong các máy tính nói chung. Chúng ta cần có được nhiễu của môi trường có thể là từ thiết bị bên trong, trạng thái tài nguyên , trạng thái mạng, trễ bàn phím... Điều mấu chốt là dữ liệu không thể đoán được bởi một kẻ tấn công bên ngoài, để đạt được điều này nhóm số mã hoá phải gồm ít nhất 128 bit.

Một hàm băm ngẫu nhiên mạnh thường bao hàm 1 lượng lớn pool ngẫu nhiên (nhóm số mã hoá). Các bit trả về từ pool bởi lấy dữ liệu từ pool, thường là chạy các dữ liệu thông qua hàm băm để tránh làm ảnh hưởng tới nội dung của pool. Khi cần nhiều bit hơn, pool được trộn lẫn nội dung mã hoá của nó bởi một thuật mã hoá phù hợp với một khoá ngẫu nhiên (được lấy từ phần trả về của pool). Trong một chế độ mà mỗi bit của pool phụ thuốc vào mọi bit của pool. Một nhiễu môi trường được trộn lẫn vào pool để đảm bảo việc đoán giá trị trước hoặc sau sau khi đã trộn sẽ trở nên khó thành hiện thực.

Mặc dù thuật toán tạo số mã hoá ngẫu nhiên mạnh không phải là khó tạo nên nhưng thường là bị xem nhẹ và nếu như nó được thiết kế tồi thì sẽ trở thành điểm yếu đánh chú ý của hệ thống.

Sức mạnh của các thuật toán mã hoá:Các hệ thống mã hoá tốt luôn luôn được thiết kế để càng khó bẻ gẫy càng tốt. Trong thực tế có thể xây dựng nên mộ hệ thống không thể phá vỡ (mặc dù nó không được phát triển). Sự quan tâm và trình độ luôn phải được chú ý tới. Mọi kĩ sư cần phải hiểu rõ được các khái niệm về bảo mật và được đào tạo.

Theo lý thuyết, một phương thức mã hoá với một khoá có thể bị bẻ bởi việc thử mọi khoá theo tuần tự.Nếu sử dụng các bẻ khoá hàng loạt để thử mọi khoá, thì sự tính toán tăng lên nhiều lần theo sự tăng lên của độ dài khoá. Một khoá 32 bit đòi hỏi 2 mũ 32 (khoảng 10 mũ 9) bước thử. Điều này có thể được thực hiện tại một máy tính cá nhân. Một khoá 40 bit đòi hỏi một máy tính cá nhân thử trong một tuần lẽ. Một hệ thống mã hoá 56 bit (như DES) đòi hỏi nhiều máy tính cá nhân hợp tác trong vòng vài tháng nhưng có thể dễ dàng phá bởi một thiết bị phần cứng đặc biệt. Giá của phần cứng này có thể chấp nhận được đối với một tổ chức tội phạm, một công ty hàng đầu hay một chính phủ. Khoá 64 bit hiện nay có thể phá bởi một chính phủ. Khoá 80 bit sẽ bị phá trong vòng vài năm tới, khoá 128 bit sẽ an toàn trong một tương lai gần. Những khkoá lớn hơn vẫn có thể được dùng hiện nay.

Tuy nhiên độ dài khoá không phải là yếu tố duy nhất. Nhiều mã hoá có thể bị phá không bằng cách thử mọi khả năng (brute force). Nói chung, rất khó để thiết kế một thuật mã hoá mà không thể bị bẻ . Tự thiết kế một thuật mã hoá của riêng bạn có thể là thú vị, nhưng không nên dùng trong các ứng dụng thực tế trừ khi bạn là chuyên gia và biết được chính xác điều bạn đang làm.

Rất khó để giữ bí mật cho mật thuật toán mã hoá bởi một người nào đó quan tâm có thê thuê một tay bẻ khoá để dịch lại và khám phá ra phương pháp mã hoá của ta. Thực tế cho thấy đã có nhiều thuật toán mã hoá bị đưa ra công khai.

Độ dài khoá sử dụng trong khoá public thường dài hơn so với khoá đối xứng do cấu trúc mở rộng của thuật mã hoá. Vấn đề không phải ở việc đoán khoá đúng mà là nhận được khoá tương xứng từ khoá public. Đối với RSA , điều này có thể được thực hiện bằng cách phân tích một số nguyên lơn thành 2 thừa số. Trong một số hệ thống mã hoá khác cần thiết phải tính toán một tổ hợp loga thành một số nguyên lớn.

Để có được ý tưởng về sự phức tạp của hệ mã hoá RSA, một tổ hợp 256 bit có thể được phân thành thừa số tại nhà, và một khoá 512 bit có thể phá bởi 1 nhóm nghiên cứu của trường đại học trong vòng vài thánh. Khoá 7689 bit không an toàn trong một khoảng thời gian dài. Khoá 1024 bit và lớn hơn sẽ là khá an toàn hiện nay trừ khi xuất hiện những nghiên cứu chống lại RSA, khoá 2048 bit được cho là an toàn cho những thập kỉ tới.

Thường độ vững chắc của một hệ thống mã hoá bằng với sức mạnh của thuật toán mã hoá. Thuật toán mã hoá và chính sách sử dụng là những điểm quan tâm nhất trong việc thử phá vỡ một hệ thống.

Phá mã và phá mã một hệ thống:

Phá mã là nghệ thuật giải mã một thông điệp đã bị mã hoá mà không cần biết khoá giải mã. Có nhiều kĩ thuật phá mã khác nhau. Dưới đây là những phương pháp quan trọng nhất:

• Tấn công thông điệp mã hoá: Đây là trường hợp kẻ tấn công không biết gì về nội dung của thông điệp và chỉ làm việc với văn bản mã hoá. Trong thực tế thường có thể đoán được nội dung của văn bản thô, vì nhiều loại thông điệp có dạng trường đầu đề cố định. Ngay cả nhửng từ gốc và các tài liệu bắt đầu theo một cách có thể đoán được. Ví dụ rất nhiều kiểu tấn công cổ điển sử dụng việc đánh giá tần số xuất hiện của các kí tự mã hoá, tuy nhiên cách này khó hữu dụng đối với các thuật mã hoá hiện đại.

Các hệ thống mã hoá hiện đại không có điểm yếu đối với kiểu tấn công này, mặc dù đôi khi chúng có thể có một khuynh hướng tĩnh nào đó.

• Kiểu tấn công know-plaintext: Kẻ tấn công biết hoặc có thể đoán được văn bản thô trong một vài phần của văn bản mã hoá. Sau đó sẽ giải mã phần còn lại dựa trên thông tin này. Thực hiện bằng cách xem xét khoá sử dụng để mã hoá dữ liệu hoặc thông qua các shorcut.

Một trong những cách tấn công know-plaintext nổi tiếng nhấtlà phương pháp chia tuyến các khối mã hoá.

• Phương pháp chọn văn bản thô: Kẻ tấn công có khả có được mọi văn bản anh ta muốn mã hoá với một khoá chưa biết. Anh ta sẽ quyết định khoá sử dụng mã hoá.

Kiểu tấn công này rất nguy hiểm đối với một vài hệ thống, ví dụ như RSA , khi những thuật toán này được dùng, cần rất cẩn trọng để văn bản thô.

• Kiểu tấn công man-in-the-middle (kẻ trung gian): Kiểu tấn công này liên hệ đến giao thức trao đổi khoá và truyền thông mã hoá. Khi 2 nhóm, A và B trao đổi khoá để bảo mật quá trình trao đổi thông tin (ví dụ sử dụng Diffie-Helllman), một đối thủ sẽ tự đưa anh ta vào A và B. Anh ta bắt các tín hiệu A và B trao đổi với nhau và tạo nên một khóa trao đổi cho A và B riêng rẽ. A và B sử dụng các khoá riêng rẽ này, mỗi khoá đều được biết bởi kẻ tấn công. Kẻ tấn công có thể giải mã mọi thông điệp từ A và gửi tới B bằng cách mã hoá nó lần nữa với khoá mà hắn trao đổi với B. Cả A và B đều tin rằng họ đang truyền thông một cách bảo mật nhưng thực tế là kẻ tấn công đang nghe được tất cả.

Cách thông thường để ngăn chặn kiểu tấn công man-in-the-middle là sử dụng một khoá public có khả năng cung cấp chữ kí điện tử. Để thiết lập, các bên phải biết được khoá public của nhau. Sau khi khoá bí mật chung được tạo ra, các bên gửi chữ kí điện tử cho nhau. Kẻ tấn công có thể thử giả mạo chữ kí nhưng không thành công bởi anh ta không thể giả mạo chữ kí.

Giải pháp này phù hợp với các khoá public phân phối bảo mật. Một ví dụ là các nhánh chứng thực như X.509 được sử dụng trong IPSec.

Tương quan giữa khoá bí mật và đầu ra của hệ thống mã hoá là nguồn thông tin cho kẻ phá mã. Trong những trường hợp dễ nhất, thông tin về khoá bí mật bị rò rỉ trực tiếp bởi hệ thống mã hoá. Các trường hợp phức tạp hơn đòi hỏi nghiên cứu sự tương quan giữa hệ thống mã hoá và thông tin đoán khoá mã hoá.

Ví dụ, trong một kiểu tấn công chống lại mã hoá khối kẻ bẻ khoá sẽ thử các đoạn văn bản thô và các văn bản đã mã hoá. Hắn sẽ đoán các bit khoá của hệ thống mã h/oá dựa trên tương quan giữa chuỗi kí tự nhập vào và chuỗi mã hoá đầu ra, và sẽ đoán ra các bit khoá tuy nhiên có thể có rất nhiều biến thể khác nhau.

• Kiểu tấn công sử dụng các phần mềm bên dưới: trong một vài năm trở lại đây càng ngày càng xuất hiện nhiều các thiết bị mã hoá di động nhỏ được sử dụng, một kiểu tấn công mới xuất hiện nhằm trực tiếp vào phần cứng thực thi của hệ thống mã hoá.

Kiểu tấn công sử dụng dữ liệu từ việc đo đạc chính xác các thiết bị mã hoá, sau đó tìm ra thuật toán mã hoá và khoá sử dụng từ sự đo đạc trên. Ý tưởng này về cơ bản gần giống như dạng tấn công tương quan. Từ sự so sánh giữa kết quả đo đạc đầu vào và chuỗi mã hoá đầu ra hắn sẽ đoán ra các bit khoá.

Đã xuất hiện những kiểu tấn công dựa vào những đo đạc về bộ định thời của thiết bị, công suất sử dụng, và tần số bức xạ. Những thông tin có thể được sử dụng để tìm ra khoá bí mật hay các thông tin khác lưu trữ trong thiết bị.

Kiểu tấn công này nói chung độc lập với loại thiết bị và có thể ứng dụng trên mọi loại thiết bị có chế độ bảo vệ lỏng lẻo.

Các thông tin thêm về kiểu tấn công này các bạn có thể tìm hiểu thêm tại http://www.cryptography.com . Các lỗi trong hệ thống mã hoá có thể dẫn tới việc tay bẻ khoá có thể tìm ra được khoá bí mật. Điều thú vị trong các thiết bị mã hoá dẫn tới một vài thuật toán trở nên sai lệch với sự xuất hiện của những lỗi nhỏ trong cấu trúc tính toán bên trong.

Ví dụ sự thực thi của khoá bí mật RSA rất nhậy cảm với lỗi. Dù chỉ một lỗi nhỏ trong quá trình tính toán cũng sẽ dẫn tới việc lộ khoá bí mật.

• Máy tính lượng tử: Những nghiên cứu của Peter Shor trong các chuỗi định thời và các thuật toán loga với máy tính lượng tử đã dẫn tới sự tăng chú ý trong tính toán lượng tử. Máy tính lượng tử trong những nghiên cứu gần đây cho thấy sức mạnh rất lớn của nó so với các máy tính hiện nay. Sức mạnh này nhận được từ cấu trúc tính toán song song do đó thay vì chỉ thực hiện một tính toán tại một thời điểm nó có thể thực thi nhiều tính toán cùng lúc.

Những nghiên cứu của Shor cho thấy sự đi vào lịch sử của các khoá mã hoá public tuy nhiên với trường hợp của các khoá private thì sự hiệu quả không cao.

Tính toán lượng tử cũng hứa hẹn nhiều về bảo mật và che giấu dữ liệu tuy nhiên nó vẫn đang trên đường thu hút sự chú ý hơn là được ứng dụng trong các application.

• Mã hoá DNA: Với cấu trúc tính toán song song mã hoá DNA đòi hỏi những tính toán rất lớn trong việc bẻ khoá. Cấu trúc song song tự nhiên khiến tính toán DNA đòi hỏi một tốc độ tính toán cực cao mà các máy tính serial hiện nay khó lòng thực hiện nổi.

Một vấn đề đặt ra là mã hoá DNA cũng đòi hỏi tính toán lớn do đó nó tiêu tốn không ít tài nguyên của hệ thống vận hành.

Có rất nhiều thuật toán mã hoá khác nhau, để hiểu sâu hơn các bạn tìm đọc các sách sau: "Handbook of Applied Cryptography" của Menezes, van Oorschot, và Vanstone và quyển "Applied Cryptography" của Schneier.

[SIZE=7]II)Thuật mã hoá khoá public:

Hệ thống khoá public đã được phát minh ra từ cuối những năm 1970 với sự hợp lực của các nhà phát triển lý thuyết phức tạp trong khoảng thời gian này. Nó được tin rằng chỉ bị phá vỡ trong khoảng thời gian hàng nghìn năm. Ý tưởng la sử dụng 2 khoá là khoá public và khoá private (khoá bí mật). Dùng khoá public để mã hoá dữ liệu và sử dụng khoá private để giải mã. Khoá private chỉ được sở hữu bởi người nhận thông điệp tuy nhiên khoá public thì mọi người đều biết và có thể gửi đi.

Một ý tưởng khác là dùng khoá trao đổi. Trong một phiên truyền thông 2 bên cần tạo ra một khoá bí mật chung bằng hệ thống mã hoá khoá bí mật (ví dụ như một vài mã hoá khối).

Sau đó, Whitfield Diffie và Martin Hellman sử dụng nhiều ý tưởng để thiết lập một hệ thống khoá trao đổi tạo nên kỉ nghuyên của hệ thống mã hoá public. Một thời gian ngắn sau đó Ron Rivest, Adi Shamir và Leonard Adleman phát triển một hệ thống mã hoá chính là hệ thống mã hoá khóa public đầu tiên có khả năng mã hoá và giải mã chứ kí điện tử.

Sau đó xuất hiện vài hệ thống mã hoá khoá public với những ý tưởng khác nhau. Rất lớn trong số đó trở nên không an toàn. Tuy nhiên giao thức của Diffie-Hellman và RSA có vẻ như vẫn là 2 trong số những thuật toán mã hoá vững chắc nhất cho tới nay.

Thuật ngữVấn đề mấu chốt của mọi thuật toán mã hoá đó là sự khó khăn trong tính toán. Sự an toàn của thuật toán dựa trên độ khó của việc tìm ra khoá private từ khoá public. Chúgn ta sẽ xem xét một vài khái niệm sử dụng trong mã hoá khoá public.

• Thuật toán. Một thuật toán mô tả cách thức một tính toán riêng biệt được thực thi ( hay một vấn đề được giải quyết). Độ hữu dụng của thuật toán có thể đo bằng so bước cần thiết để nó giải quyết vấn đề. Do vậy nếu chúng ta nói rằng một thuật toán tiến hành mất n bước nghĩa là nó có n lần tính toán tuy nhiên chúng ta không thể biết rằng mỗi bước nó thực thi trong bao lâu.

• Sự phức tạp tính toán. Một vấn đề là một đa thức bậc P sẽ được giải quyết bằng một thuật toán thực hiện ít hơn n mũ t bước trong đó t là một số tự nhiên và biếtn n mô tả kích thước của vấn đề.

Nếu một giải pháp phỏng đoán được xem xét với một đa thức thì vấn đề được nói rằng trong trạng thái NP (chưa biết bậc đa thức). Vấn đề nằm ở chỗ NP rất lớn và nó bao gồm cả việc phân tích thừa số của một số nguyên.

Nó là NP-hard nếu như không có một vấn đề nào trong NP dễ dàng giải quyết, Không có một bậc đa thức sẵn có cho một vấn đề NP-hard. Và những thuật toán này được tin rằng không tồn tại.

Trong việc phá mã một thuật toán khoá public, kẻ phá mã thường tính toán với những bit cụ thể nào đó chứ không đưa ra 1 thuật toán chung cho tất cả các dữ liệu để rồi thực hiện phép thử với những tính toán cực lớn.

• Số nguyên tố: Số nguyên tố là số không có ước số nào trừ số 1 và chính nó. Do đó các số 2,3,5,7,11.... là các số nguyên tố. Chúng ta có thể đếm được rất nhiều số nguyên tố khác nhau trong đó số nguyên tố mà chúng ta biết là (26,972,593)-1.

• Phân tích thừa số: Mọi số nguyên đều có thể chia ra thành tích của các số nguyên tố. Ví dụ 10 = 2 * 5và là duy nhất

Một cách thức để phân tích thừa số là chia số đó liên tiếp cho các nguyên tố nhỏ hơn cho tới khi số còn lại là số nguyên tố. Điều này chỉ hữu dụng trong trường hợp cho các số nguyên nhỉo hơn 10 mũ 16 và đòi hỏi phải thử mọi số nguyên tố nhỏ hơn 10 mũ 8. Trong hệ thống mã hoá khoá public dựa trên việc phân tích, các số có kích thước 10300 và sẽ được phân tích thành các số nguyên tố nhỏ hơn 10 mũ 150 và sẽ có khoảng 10 mũ 147 số nguyên tố theo một định lí toán học. Nó vượt xa số hành tinh trong vũ trụ và có vẻ như không thể tính nổi.

Những trường hợp phân tích dễ dàng nằm trong các số chỉ có thừa số là một lượng nhỏ các số nguyên tố ví dụ 759375 có thể viết thành 3 mũ 5* 5 mũ 5. Trong hệ mã hoá chúng ta muốn sử dụng các số nguyên với một lượng lớn các thừa số nguyên tố. Chúng ta thường phân một số tự nhiên thành 2 thừa số nguyên tố lớn như trong hệ thống mã hoá RSA.

Một trong những thuật toán phân tích thừa số hiệu quả nhất hiện nay đó là thuật toán sàng lọc trường (NFS) bao gồm một phase sàng lọc và một ma trận bước. Pha sàng lọc có thể phân thành một lượng lớn các thành phần, nhưng ma trận đòi hỏi một siêu máy tính lớn. Sự hiệu quả của thuật toán thuật toán NFS thấy rõ đối với các số cực lớn, nó có thể phân thừa số mọi số nguyên với kích thước 10 mũ 150 trong khoảng thời gian vài thành.

Không thể chối cãi rằng phân tích thừa số số nguyên và một vấn đề khó và đòi hỏi những tính toán rất lớn.

• Các thuật toán tách loga: Một lớp vấn đề quan trọng khác đó là việc tìm n để y= g mũ n. Điều này có thể thực hiện dễ dàng với các số nguyên tuy nhiên đối với những thiết lập hơi sai khác thì vấn đề trở nên khó khăn.

Để tìm ra n từ g mũ n, ta có the chia liên tiếp các số tự nhiên thành một nhóm hạn chế của các lớp còn lại. Về trực quan thì chúng ta có thể phân ra thành một chuỗi các số tự nhiên và gắn chúng lại theo một vòng tròn (tạo thành một vòng tròn bán kính m).

Các số 0,m, 2m, 3m... đều chiếm cùng một điểm trên vòng tròn và được nói là cùng nằm trong một lớp tương ứng (chúng ta có thể viết "0 = m = 2m = ... (mod m)''). Mỗi lớp tương ứng bao gồm các số trong 0 .. m-1. Do đó bạn có thể viết mọi số tự nhiên n thành t + km với mọi số tự nhiên t, với 0 <= t < m. Có thể viết n = t (mod m) trong trường hợp này. m được gọi là modul.

• Knapsacks. Với một nhóm nhỏ các số nguyên, knapsack là việc tìm ra các tập của các số nguyên này mà tổng của chúng bằng với số nguyên đưa ra. Ví dụ cho (2, 3, 5, 7)và 10, chúng ta có thể tìm ra 2 + 3 + 5 = 10, và ta có thể giải quyết hoàn toàn bằng phương pháp thử hàng loạt (brute force).

• Lưới.

Chúng ta đưa ra một vector cơ bản là wi = < w1, ..., wn > với i = 1, ..., m, và lưới được tạo ra từ vector cơ bản, Tức ra mọi thành phần của lưới đều có dạng sau t1w1 + t2w2 + ... + tmwm, với ti là các số nguyên.

Các hệ thống mã hoá thực tế

Sự quan tâm đến thuật mã hóa khoá public được thể hiện bằng việc tạo nên những hệ thống mã hoá thực tế quan trọng. CHúng được liệt kê dưới đây:

Theo các bước cơ bản sau một hệ thống mã hoá khoá public được tạo nên: với một vấn đề phức tạp (ví dụ NP-hard ) trong đó bạn có thể tìm một cách để giải quyết vấn đề bậc đa thức. Để mã hoá một thông điệp, chuyển thông điệp sang một thể hiện dễ của vấn đề khó , sau đo sử dụng khoá public để chuyển thể hiện dễ này về lại kiểu khó. Kết quả được gửi tới người nhận thông qua một kênh không an toàn. Để giải mã sử dụng khoá public để chuyển đổi kiểu khó sang dễ và thu hồi lại thông điệp. Mọi hệ thống khoá public đều theo hướng này, mặc dù về chi tiếp chúng có sự khác biệt (giống như vần đề cấu trúc của khoá public va khoá private).

Phương pháp phân tích thừa số: RSA, Rabin

• RSA (Rivest-Shamir-Adleman) là phương pháp mã hoá khoá public được sử dụng nhiều nhất, Nó có thể sử dụng cho cả mã hoá và chứ kí điện tử, Sụ bảo mật của RSA được so sánh bằng sự phân tích thừa số, mặc dù nó vẫn chưa được phát triển.

Thuật toán của RSA đặt modul n=p*q với 2 số nguyên tố bí mật lớn p và q. Để mã hoá một thông điệp m, nó được đem mũ với một thành phần public nhỏ e. Với giải mã, người nhận thực hiện ciphertext c= m mũ e (mod n) thực hiện chia ngược d=e mũ -1 (mod (p-1)*(q-1))

(chúng ta cần thiết chọn lựa e thích hợp) và tạo ra cd = m e * d = m (mod n).Khoá private bao gồm n,p,q,e,d (mà p và q có thể bị quên), khoá public chỉ gồm n và e. Vấn đề với kẻ tấn công là việc nghịch đảo d của e là không dễ hơn việc phân tích thừa số của n.

Kích thước khoá (kích thước của modul) phải lớn hơn 1024 bit (có độ lớn 10300) với lí do bảo mật, khoá với kích thước 2048 bit sẽ đủ bảo mật cho vài thập kỉ tới.

Lý thuyết thì sự phân tích thừa số của số tự nhiên lớn sẽ làm cho RSA dễ tổn thương nhưng vẫn còn có những kiểu tấn công khác nữa. RSA yếu trước kiểu tấn công lựa chon plaintext và lỗi phần cứng.

RSA hiện đang là thuật mã hoá public key quan trọng nhất, và đã được sử dụng tại USA cho tới năm 2000.

• Hệ thống mã hoá Rabin: có thể xem như gần gũi với RSA, mặc dù nó có quá trình giải mã khác. Điều thú vị là sự phá mã Của Rabin tương với việc phân tích thừa số.

Rabin sử dụng lũa thừa của 2 (hay bất kì một số tự nhiên nào) thay thế cho các số nguyên tố như trong RSA. Điều này dẫn tới 2 kết quả sau: Trước tiên, hệ thống mã hoá Rabin tương đương với việc phân tích thừa số, thứ 2 việc giải mã trỏ nên khó khăn hơn, ít ra là về cảm giác. Vấn đề tiếp theo là làm sao để biết đầu ra của tiến trình giải mã là đúng.

Cũng do sự phân tích thừa số, kích thước của modul là phần quan trọng nhất của sự bảo mật. Modul cảu 1024 bit được cho là bảo mật.

Chuẩn IEEE P1363 có lẽ là chuẩn dành cho Rabin được tuân thủ rộng rãi nhất.

Việc phân tích thừa số gắn liền với sự giải mã dẫn tới sự kém đi về mặt bảo mật của thuật toán và Rabin không được khuyến khích là một thuật toán mã hoá mạnh.

Phương pháp Loga rời rạc

• Diffie-Hellman là một giao thức chung sử dụng cho khoá trao đổi.

Trong nhiều giao thức mã hoá 2 bên muốn bắt đầu truyền thông. Tuy nhiên, giả sử họ không khởi tạo khoá chung và do đó không thể sử dụng được hệ thống khoá bí mật. Khoá trao đổi thực hiện bởi giao thức Diffie-Hellman khắc phục trường hợp này bằng cách cho phép cấu trúc khoá bí mật thông qua một kênh truyền thông không bảo mật. Nó dựa trên vấn đề loga rời rạc, gọi là bài toán Diffie-Hellman. Bài toán được cho là khó, và trong vài trường hợp cũng khó như bài toán loga rời rạc.

Giao thức Diffie-Hellman được cho là bảo mật khi một nhóm toán học xấp xỉ đựoc sử dụng. Trong trường hợp riêng, thành phần tạo nên hàm mũ có chu kì lớn.

Thuật toán rời rạc hàm mũ có thể được sử dụng để tấn công giao thức Diffie-Hellman. Nếu giao thức Diffie-Hellman sử dụng với một modul số học của một số nguyên tố, do đó có thể chọn ra một số nguyên tố đủ lớn và chú ý vào việc chọn lựa thành phần ban đầu. Những vấn đề tinh vi có thể xảy ra bởi việc lựa chọn số ban đầu kém. Rất nhiều sách đã viết về vấn đề có thể xảy ra. một trong những vấn đề nổi tiếng nhất là "On Diffie-Hellman key agrrement ưith short exponents" (Eurocrypt'96) của Oorschot và Wiener.

Các kiểu tấn công vào giao thức Diffie-Hellman bao gồm kiểu tấn công man-in-the-middle attack . Kiểu tấn công đòi hỏi sự can thiệp thích ứng, nhưng thực nghiệm rấtdễ dàng nếu như giao thức không sử dụng những biện pháp đối phó như chữ kí điện tử.

Thông thường Diffie-Hellman không được ứng dụng trên phần cứng, do đó tấn công vào phần cứng không phải là một nguy cơ lớn. Điều này có thể thay đổi trong tương lai khi truyền thông di động trở nên phổ biến hơn.

• DSS (Chuẩn chữ kí số): Một phương thức chữ kí duy nhất được xác thực bởi chính phủ Mỹ. Thuật toán DSA (Thuật toán chữ kí điện tử số- Digital Signature Algorithm) gần giống như thuật sử dụng bởi thuật toán chũ kí số ElGamal hoặc bởi the Schnorr. Dĩ nhiên điều này khá hiệu quả, mặc dù không hiệu quả bằng RSA cho chứng thực chũ kí. Chuẩn DSS sử dụng hàm băm SHA-1 để xắp xếp thông điệp.

Vấn đề chủ yếu đối với DSS là kích thước của phân nhóm cố định (thứ tự của các thành phần khởi tạo), sẽ giới hạn bảo mật vào khoảng 80 bit.Tấn công kiểu " Hardware attacks " có thể là đáng ngại trong vài trường hợp của DSS. Tuy nhiên nó được sử dụng rộng rãi và được chấp nhận như là một thuật toán tốt.

• Thuật mã hoá khoá public ElGamal: Nó là mở rộng của ý tưởng của Diffie-Hellman trong việc chia sẻ tạo khoá khoá bí mâtk. Điều thiết yếu là nó tạo nên khoá chia sẻ và sử dụng nó như là phương tiện dùng 1 lần để mã hoá khối dữ liệu. ElGamal là người đảm nhiệm của DSS và được sử dụng hoàn hảo ngày nay, mặc dù chuẩn tạo ra nó không được nổi tiếng rộng rãi.

• LUC là hệ mã hoá khoá public được sử dụng cho một nhóm chuyên biệt dựa trên chuỗi Lucas (có quan hệ với chuỗi Fibonacci) và cơ bản nó tạo ra khối. Nó có thể thực thi mọi kiểu phân chia loga dựa trên thuật toán, và LUC là một lớp các thuật toán khoá public.

• XTR là một hệ thống mã hoá khoá public được phát triển bởi Arjen Lenstra và Eric Verheul. XTR tương tự như LUC bởi nó sử dụng một nhóm nhân của một trường liên tiếp ( thực tế là Fp6) như nhóm bên dưới của nó.

Phương pháp Knapsack

Thực tế chỉ có vài kiểu hệ thống mã hoá khoá public knapsack đáng quan tâm, trong chúng không có kiểu nào có vai trò thực tế quan trọng.

• Hệ thống mã hoá Rivest-Chor dựa trên biến riêng biệt của bài toán knapsack. Đây là kiểu hệ thống mã hoá knapsack bền vững nhất trước tấn công.

• Merkle-Hellman. Đây là hệ thống mã hoá knapsack đầu tiên. Nó dựa trên ý tưởng đơn giản là giấu đi những bài toán siêu tăng của knapsack bởi mặt nạ. Tuy nhiên nó đã bị phá vỡ vào năm 1980.

Phương pháp các lưới:

Trong những năm gần đây sự quan tâm tập trung vào các hệ thống mã hoá dựa trên lưới. Một lí do là các lớp của bài toán lưới là NP-hard, và một vài hệ mã hoá hữu dụng được phát triển và có vẻ vững chắc.

• NTRU là một hệ mã hoá xuất hiện vào giữa những năm 90 như một hệ mã hoá cipher khoá public hữu dụng. Nó dựa trên bài toán lưới và có một vài điểm lí thú. Một vài phiên bản ban đầu gặp phải những vấn đề nhưng các phiên bản gần đây đã được chấp nhận như các chuẩn của Mỹ.

Tham khảo thêm tại www.ntru.com

Bài viết sưu tầm và gởi bởi NhoNguoiYeu

Welcome to VietHacker

Và xin các bạn xem thêm tại pcworldvn

Thân

Rijndael. Thuật toán này ngoài cái tên cúng cơm nghe hơi lạ tai (ghép từ tên 2 tác giả người Bỉ: Rijmen và Daemen), còn có một ngoại hiệu nổi tiếng hơn. Ngoại hiệu này được trao cho thuật toán sau khi nó đánh bại 4 ứng cử viên chung khảo còn lại là MARS, Twofish, RC6 và Serpent, giành vòng nguyệt quế trong một cuộc thi sáng chế thuật toán diễn ra từ năm 1998 đến năm 2001. Ngoại hiệu ấy là Advanced Encryption Standard (AES).

Cấu tạo: coi như cụm rõ x được ghép từ 4 words (32 bit) và mỗi word được ghép từ 4 bytes (8 bit)

x3 x2 x1 x0 := x

x33 x32 x31 x30 := x3

....

Mỗi vòng của thuật toán có thể diễn tả bằng chuỗi lệnh:

y0 := T0[x00] xor T1[x13] xor T2[x22] xor T3[x31] xor k0

y1 := T0[x01] xor T1[x10] xor T2[x23] xor T3[x32] xor k1

y2 := T0[x02] xor T1[x11] xor T2[x20] xor T3[x33] xor k2

y3 := T0[x03] xor T1[x12] xor T2[x21] xor T3[x30] xor k3

x3 x2 x1 x0 := y3 y2 y1 y0

Trong đó k0, k1, k2, k3 là các khóa con 32 bit, phát triển từ khóa chính. Mỗi Ti là một bảng tính sẵn, chứa 256 words dữ liệu, thực hiện một phép thế 1-1 biến 8 bit thành 8 bit khác, theo sau là một phép biến đổi tuyến tính biến 8 bit thành 32 bit. Luôn tiện nói thêm, phép thế có tính phi tuyến rất mạnh, mạnh nhất trong những phép thế 1-1 được biết đến hiện nay.

Tốc độ: phiên bản với khóa 256 bit có 14 vòng, khóa 192 bit có 12 vòng, khóa 128 bit có 10 vòng. Trên một CPU 32 bit, tốc độ AES 14 vòng = 2,2 DES và AES 10 vòng = 3 DES.

Độ bền: ở thuật toán này, một lần nữa ta lại thấy tính đơn giản trong kết cấu là một ưu điểm vượt trội. Bất cứ ai đã biết thám mã vi phân và thám mã tuyến tính, không cần phải đọc hết cả bản giải trình thiết kế chỉ cần lướt mắt đọc qua mô tả thuật toán, đã có thể tự mình tính ra được ngay độ bền đối với hai phương pháp thám mã này. Điều này tạo niềm tin rất lớn về độ bền hơn hẳn so với bất cứ thuật toán nào khác đã nói ở trên.

Hơn thế nữa, L. Knudsen trong quá trình khảo sát thuật toán Square -- tiền thân của AES -- đã tìm ra phương pháp thám mã tích phân (integral cryptanalysis), một phương pháp mà bất cứ nhà thiết kế mật mã nào nghe tên cũng phải sởn tóc gáy. AES đã được thiết kế để chịu được phương pháp này.

Chỉ có một điểm duy nhất làm giới nghiên cứu còn cảm thấy hơi "lăn tăn". Phép thế 8 bit biến thành 8 bit của AES, mặc dù rất mạnh, lại có thể biểu diễn bằng một đa thức rất đơn giản. Điểm này trong tương lai có thể gợi ra một phương pháp thám mã thuần túy bằng đại số. Nếu các tác giả không chọn phép thế mạnh mà chọn bừa một phép thế "bình thường" hơn, có lẽ giới nghiên cứu đã an tâm hơn.

Trên đây là lý thuyết, còn sau đây là 2 thông tin từ thực tế:

Tin vui: năm 2003, cơ quan NSA đã chính thức tuyên bố thuật toán AES có thể sử dụng trong các cơ quan nhà nước để bảo vệ tài liệu mật. Chi tiết hơn, các dữ liệu thuộc loại "Confidential" (không phổ biến?) và "Secret" (mật) có thể được mã hóa với khóa 128 bit, còn các dữ liệu thuộc loại "Top Secret" (tối mật) cần khóa dài hơn. Đây là lần đầu tiên một thuật toán của giới bảo mật dân sự được thừa nhận là có thể sánh vai với các thuật toán của giới bảo mật quân sự.

Tin không vui: Ngày 14/4/2005, trên diễn đàn sci.crypt, D. J. Bernstein đã công bố một kỹ thuật thám mã thuộc loại cache-timing. Với một server trang bị Pentium III CPU cài phần mềm OpenSSL mã hóa với tốc độ khoảng 3600 packet / giây, sau khoảng 1 ngày thu thập mẫu và 1 phút xử lý bằng một máy tính cá nhân trang bị Athlon CPU (độ phức tạp thời gian tổng cộng khoảng 2**30), kỹ thuật này đã tìm ra khóa AES 128 bit.

Các kỹ thuật cache-timing khai thác một tính chất của bộ nhớ RAM là do tác dụng của cache, thời gian truy nhập vào những địa chỉ khác nhau trong bộ nhớ không đồng đều mà có thể biến thiên. Vì vậy thời gian mã hóa các giá trị khác nhau có thể không đồng đều trong các cài đặt bằng phần mềm dùng phép tra bảng (table lookup). Thống kê này có một độ dư nhỏ nhưng tích lũy nhiều dữ liệu thì vẫn đủ sức phân biệt khóa đúng với các khóa sai. Các kỹ thuật timing được liệt vào loại side-channel attacks, nghĩa là những kỹ thuật không bẻ gãy thuật toán mà dựa vào một sơ hở nào đó trong một cài đặt cụ thể nào đó của thuật toán để bẻ gãy cài đặt.

Bernstein đã thí nghiệm trên server chỉ làm một nhiệm vụ duy nhất là mã hóa rồi thông báo thời gian. Trong môi trường thực, như Internet, nhiều yếu tố nhiễu loạn sẽ làm giảm hiệu quả của kỹ thuật cache-timing. Nhưng giảm đi bao nhiêu lần, có đủ sức triệt tiêu mọi nguy cơ hay không thì đó là một vấn đề còn đang tranh cãi.

Bạn đang đọc truyện trên: Truyen2U.Pro

#crypto