Mật mã học 101 – Mã hóa công khai

Nguồn:

  • Chapter 1, Applied Cryptography: Protocols, Algorithms, and Source Code in C, Second Edition, Bruce Schneier, 1996

Keyword

  • Public-Key Algorithm, Asymmetric Algorithm, Mã hóa khóa công khai, Mã hóa bất đối xứng

Mã hóa công khai

Mã hóa khóa công khai (hay còn gọi là mã hóa bất đối xứng) được thiết kế sao cho khóa để mã hóa khác khóa để giải mã. Hơn nữa, khóa để giải mã không thể (ít nhất là trong thời gian cho phép) có thể tính toán được từ khóa để mã hóa. Các thuật toán như vậy được gọi là các thuật toán công khai vì khóa để mã hóa có thể công bố rộng rãi: Một người hoàn toàn lạ có thể sử dụng khóa để mã hóa để mã hóa thông điệp, nhưng chỉ  có những người đặc biệt biết được khóa để giải mã mới có thể giải mã. Trong các hệ thống này, khóa để mã hóa thường được gọi là khóa công khai (public key), và khóa để giải mã được gọi là khóa riêng tư (private key). Khóa riêng tư cũng được gọi là khóa bí mật (secret key).

ĐỘNG NÃO CHÚT NÀO?

C1. Lợi ích của hệ mã hóa công khai?

C2. RSA là một hệ mã công khai điển hình.

a) Hãy tạo ra bộ khóa cho riêng mình

b) Hãy mã hóa và giải mã thông điệp “I LIKE PUBLIC-KEY ALGORITHM” với bộ khóa đó.

(Trả lời bằng cách comment dưới bài viết này)

(Xem loạt bài về Mật mã học tại đây)

Mật mã học 100 – Mã hóa đối xứng

Nguồn:

  • Chapter 1, Applied Cryptography: Protocols, Algorithms, and Source Code in C, Second Edition, Bruce Schneier, 1996

Keyword

  • Symmetric Algorithms, Conventional Algorithm, Secret-Key Algorithm, Single-Key Algorithm, One-Key Algorithm, Mã hóa đối xứng

Mã hóa đối xứng

Có 2 loại mật mã sử dụng khóa: mật mã đối xứngmật mã khóa công khai. Trong mật mã đối xứng (symmetric algorithm), khóa sử dụng để mã hóa có thể được tính ra từ khóa để giải mã và ngược lại. Trong hầu hết các mã đối xứng,  khóa để mã hóa giống khóa để giải mã. Các thuật toán này cũng gọi là mã hóa khóa bí mật (secret-key algorithm), mã hóa khóa đơn (single-key algorithm hay one-key algorithm), yêu cầu người gửi và ngưởi nhận phải thống nhất một khóa trước khi liên lạc bí mật. Độ an toàn của thuật toán đối xứng phụ thuộc vào độ an toàn của khóa, nếu khóa bị tiết lộ thì ai cũng có thể mã hóa và giải mã các thông điệp.

Quá trình mã hóa và giải mã trong mã hóa đối xứng có thể được biểu diễn bởi:

E_{K}(M)=C \\ D_{K}(C)=M

Mật mã đối xứng có thể chia thành 2 dạng. Một dạng làm việc với từng bit (hoặc byte) trong một lúc; được gọi là mã hóa dòng (stream algorithm hoặc stream cipher). Một dạng làm việc với một nhóm các bit. Nhóm các bit đó được gọi là các khối (block). Dạng mã hóa này được gọi là mã hóa khối (block algorithm hoặc block cipher). Trong các thuật toán cho máy tính hiện đại, một khối thường có độ dài 64 bit –  vừa đủ lớn để có thể ngăn chặn phá mã, vừa đủ nhỏ để có thể làm việc. (trước thời đại của máy tính, các thuật toán thường làm việc với từng kí tự một. Bạn có thể nghĩ đó là các mật mã dòng)

ĐỘNG NÃO CHÚT NÀO?

C1. Bạn biết những thuật toán mã hóa đối xứng nào? (liệt kê càng nhiều càng tốt)

C2. DES là một loại mật mã đối xứng phổ biến, được chính phủ Mỹ chọn làm chuẩn vào năm 1976

a) Hãy mã hóa đoạn văn bản sau “I Love DES” với khóa là Byte[] = 1122334455667788

b) Giải mã đoạn mã sau “4D BD 54 F2 A3 27 06 AA 80 69 88 3A 1D CB 79 4B” với khóa là Byte[] = 1122334455667788

(Trả lời bằng cách comment dưới bài viết này)

(Xem loạt bài về Mật mã học tại đây)

Mật mã học 011 – Công cụ: Các thuật toán và Khóa

Nguồn:

  • Chapter 1, Applied Cryptography: Protocols, Algorithms, and Source Code in C, Second Edition, Bruce Schneier, 1996

Keyword

  • Cryptography Algorithms, Keys, Symmetric Algorithm, Public-Key Algorithm, Các thuật toán mã hóa, Thuật toán, Thuật toán đối xứng, Thuật toán công khai

Mở đầu

Một thuật toán mã hóa (cryptographic algorithm), hay gọi là một mật mã (cipher), là các hàm toán học sử dụng trong quá trình mã hóa và giải mã (thông thường, có hai hàm: một hàm để mã hóa và một hàm để giải mã)

Các thuật toán hạn chế (restricted algorithm)

Nếu độ an toàn của một hệ mật mã phụ thuộc vào việc giữ bí mật về thuật toán, thì đó là thuật toán hạn chế (restricted algorithm). Các thuật toán hạn chế có lịch sử rất thú vị, nhưng lại không phù hợp với các tiêu chuẩn của ngày nay. Các tổ chức lớn hoặc các tổ chức hay có sự thay đổi không thể sử dụng chúng, vì mỗi khi một thành viên trong tổ chức rời khỏi, mọi thành viên còn lại phải thay đổi thuật toán. Nếu một thành viên trong nhóm làm lộ thuật toán ra bên ngoài, thuật toán cũng phải thay đổi.

Một tác hại nữa, là các thuật toán hạn chế không yêu cầu bất kì sự kiểm soát hoặc tiêu chuẩn nào. Một nhóm bất kì có thể nghĩ ra một thuật toán của riêng họ. Do đó, các nhóm không thể dùng chung một phần mềm hay phần cứng nào (vì mỗi phần mềm và phần cứng đó lại dùng thuật toán riêng biệt). Với các thuật toán cài đặt trên phần mềm và phần cứng, kẻ xấu có thể mua sản phẩm đó và tìm ra được thuật toán. Nếu không có ai trong nhóm là một nhà mật mã giỏi, họ không thể biết được thuật toán họ sử dụng có an toàn hay không.

Do những nhược điểm đó, những thuật toán hạn chế thường được sử dụng cho các ứng dụng nhỏ.  Người dùng thường không nhận ra hoặc không quan tâm các vấn đề về an toàn trong hệ thống của họ.

Khóa

Mật mã hiện đại giải quyết vấn đề đó bằng khóa (key), ký hiệu là K. Khóa này là một số bất kỳ trong một tập hợp số rất lớn. Tập hợp số rất lớn đó được gọi là không gian khóa (keyspace).  Cả hàm giải mã lẫn hàm mã hóa điều sử dụng khóa, ta biểu diễn như sau

E_{k}(M) = C \\ D_{k}(C)= M

Dễ thấy, các hàm này có tính chất

D_{k}(E_{k}(M))=M

Một số thuật toán dùng khóa để mã hóa (encryption key) khác với khóa để giải mã (decryption key). Ký hiệu khóa để mã hóa là K_1, khóa để giải mã là K_2, ta có các phương trình:

E_{K_1}(M)=C \\D_{K_2}(C)=M\\D_{K2}(E_{K_1}(M))=M

Độ an toàn của các thuật toán này phụ thuộc vào khóa; không phụ thuộc vào chi tiết các thuật toán. Điều này khiến các thuật toán có thể được công bố và phân tích rộng rãi. Do đó, các thuật toán này có thể dùng trong nhiều tổ chức, mà vẫn đảm bảo được tính an toàn. Kẻ xấu biết được về thuật toán, nhưng không có khóa thích hợp, vẫn không thể biết được nội dung của thông điệp.

Một hệ mật mã (cryptosystem) một thuật toán, kèm thêm tất cả các bản rõ, bản mã và khóa.

>> Động não chút nào?

Bạn đã từng gặp hoặc các thuật toán hạn chế nào?

Mật mã học 010 – Sức mạnh

Nguồn:

  • Chapter 1, Applied Cryptography: Protocols, Algorithms, and Source Code in C, Second Edition, Bruce Schneier, 1996

Keyword

  • Cryptography, An toàn (Confidentiality), Xác thực (Authentication), Toàn vẹn (Integrity) và Không chối bỏ (Nonrepudiation)

Bạn thường nghe nói mật mã rất “mạnh”!!! Vậy mã hóa giúp chúng ta những gì?

Mã hóa cung cấp sự bí mật (confidentiality)

Những mật mã mạnh, chia bị phá vỡ, và được dùng đúng cách giúp bạn bảo vệ thông tin của bạn một cách an toàn.

Bạn có thể giữ bí mật khi gửi thư điện tử với PGP, kết nối của bạn đến một trang web có thể bí mật với giao thức SSL/TLS,…

Mã hóa hỗ trợ việc xác thực (authentication)

Mã hóa giúp người nhận có thể tin tưởng rằng thông điệp do đúng người gửi. Kẻ xấu không thể giả mạo bất kì người nào.

Mã hóa bảo đảm tính toàn vẹn (integrity)

Mã hóa giúp người nhận tin tưởng rằng thông điệp không bị sửa trong quá trình truyền. Kẻ xấu không thể thay thế một thông điệp giả mạo với một thông điệp hợp pháp.

Mã hóa bảo đảm tính “không chối bỏ” (non-repudiation)

Mã hóa khiến người gửi không thể phủ nhận rằng anh ta đã không gửi thông điệp mà anh ta đã gửi.

>>> Động não chút nào?

Hãy giúp tôi liệt kê thêm các sức mạnh của mật mã, hoặc bổ sung thêm các ví dụ cho những sức mạnh này

 

 

 

Mật mã học 001 – Các thuật ngữ

Nguồn:

  • Chapter 1, Applied Cryptography: Protocols, Algorithms, and Source Code in C, Second Edition, Bruce Schneier, 1996

Keyword

  • Cryptography, Plaintext, Ciphertext, bản mã, bản rõ, mã hóa, giải mã, phá mã

Mở đầu

Bài này nhằm giới thiệu những khái niệm chung nhất về mật mã học. Cũng là để thống nhất các thuật ngữ cho các bài viết sau này.

Người gửi (sender) và người nhận (receiver)

Trong mật mã học, ta xem xét đến trường hợp người gửi muốn gửi một thông điệp cho người nhận  một cách bí mật. Thông điệp cần được truyền sao cho trong ngay cả khi nó lọt vào tay kẻ xấu, kẻ xấu vẫn không thể hiểu được nội dung của thông điệp.

Thông điệp và mã hóa

Thông điệp (message), hay còn gọi là văn bản gốc, bản rõ (plaintext, cleartext), là thứ người gửi muốn truyền đạt đến cho người nhận. Ví dụ, một anh chàng đang yêu muốn gửi thư đến cho một cô nàng, anh ấy viết thư và trao trực tiếp cho cô ấy, thì bức thư chính là một thông điệp (message).

Nhưng vấn đề nảy sinh khi anh chàng không trực tiếp gửi cho cô gái (chắc do ngại), mà nhờ một người bạn X gửi hộ. X có thể là người xấu, rất có thể X sẽ tò mò giở bức thư ra xem, và bao nhiêu “thủ đoạn” của anh chàng sẽ bị X biết hết. Do đó, anh chàng cần “biến đổi” bức thư sao cho những người khác không hiểu được, mà chỉ có cô gái có thể hiểu được thôi. Việc biến đổi như vậy, được gọi là quá trình mã hóa (encrypt). Và bức thư khi đã được “biến đổi”, được gọi là văn bản mã (ciphertext) (hay còn có các tên khác như bản mã). Quá trình cô gái chuyển từ bức thư đã được “biến đổi” trở về bức thư gốc ban đầu anh chàng viết, được gọi là quá trình giải mã (decrypt).

Một cách tổng quát, quá trình mã hóa và giải mã được biểu diễn bởi sơ đồ sau:

encryptionprocess

Mật mã học (cryptography) là nghệ thuật và môn khoa học giữ các thông điệp bí mật.

Những người nghiên cứu và phát triển mật mã được gọi là nhà mật mã học (cryptographer)

Người phá mã (cryptanalyst) là những người nghiên cứu và phát triển ngành phá mã (cryptanalysis)

Bản rõ và Bản mã

Bản rõ thường được ký hiệu là M (message) hay P (plaintext). Nó có thể là một vài bit, một tập tin văn bản, một hình ảnh, một đoạn phim,… hay bất cứ thứ gì chứa thông tin. Trong mật mã cổ điển, M thường là các văn bản. Trong mật mã hiện đại, M thường là dữ liệu nhị phân. Bản rõ thường tham gia vào quá trình truyền dữ liệu và lưu trữ. Trong mọi trường hợp, bản rõ luôn được mã hóa.

Bản mã thường được ký hiệu là C (cipher). Nó cũng là dữ liệu nhị phân.

Hàm mã hóa E, là hàm biến đổi M thành C: E(M) = C

Hàm giải mã D, là hàm biến đổi C thành M: D(C) = M

Trong các bài viết sau này, sẽ thống nhất dùng thuật ngữ "bản rõ" cho từ plaintext (tương đương với các từ văn bản gốc), "bản mã" cho từ ciphertext (tương đương với từ văn bản mã). "Mã hóa" cho từ encrypt, "giải mã" cho từ decrypt, "phá mã" cho từ cryptanalysis (tương đương với các từ thám mã, phân tích mã)

ĐỘNG NÃO CHÚT NÀO?

C1. Hãy lấy một ví dụ về các khái niệm mật mã, mã hóa, bản mã, bản rõ, nhà giải mã, nhà phá mã mà bạn biết

(Trả lời bằng cách comment dưới bài viết này)

Pigpen Cipher

Nguồn

Keyword

Mật mã Pigpen, Mật mã chuồng heo, Cryptography, Substitution Cipher, Masonic Cipher, Freemason’s Cipher, Rosicrucian Cipher, Tic-tac-teo Cipher

Mở đầu

Mã Pigpen (hay còn có các tên khác là mã Masonic, mã Freemason, mã Rosicrucia, mã Tic-tac-teo) là một mã thay thế đơn giản, thay thế mỗi chữ cái bằng một hình tương ứng

Mã hóa – Giải mã

Hình vẽ bên là bảng mã của mã Pigpen. Khi chia các hình thành các phần bằng nhau sẽ thu được các hình con, mỗi chữ cái sẽ được thay thế bằng các hình con tương ứng như sau:

Ví dụ

Văn bản “X MARK THE SPOTS”, sẽ được mã hóa thành hình sau

Lịch sử

Lịch sử chính xác của mật mã này vẫn chưa được xác định, nhưng theo những ghi chép thì mật mã này xuất hiện vào những thế kỷ 18. Được sử dụng bởi những thành viên của hội Rosicrucianism và hội Tam Điểm (Freemasonry) để giữ bí mật những trao đổi của họ, từ đó, thường được gọi là mật mã của Hội Tam Điểm (Freemason’ s Cipher)

Hội Tam Điểm bắt đầu sử dụng mật mã pigpen vào đầu thế kỷ 18 để trong các ghi chép về lịch sử và nghi thức của họ, và trong các trao đổi giữa những người đứng đầu. Trong những bia mộ của những thành viên này, có thể tìm thấy những mật mã pigpen được khắc trên đó. Một trong những bia mộ sớm nhất được tìm thấy ở Trinity Church Cemetery (nghĩa trang ở nhà thờ Trinity) tại NewYork, có chứa những mật mã pigpen khắc trên đó. Như trên bia mộ của James Leefon có khắc những ký tự được giải mã là “Remember Death” (memento mori)

2012-12-21_10h59_56

Mật mã Pigpen được khắc trên bia mộ của James Leefon. Nguồn:http://www.flickr.com/photos/luizmachadophotos/2126621361/sizes/z/in/photostream/

Chú thích: Rosicrucianism (Hội Thập tự Hoa hồng) là thuyết thần học của một hội kín thần bí, hình thành ở đức thời kỳ Trung cổ muộn, với học thuyết “xây dựng dựa trên những chân lý bí truyền của quá khứ cổ xưa”, những thứ “được giữ kín trước người phàm, đem lại sự hiểu biết về tự nhiên, vũ trụ vật chất và lĩnh vực tinh thần”

Thử thách

C1. Giải mã trên tấm huy hiệu sau

Atbash Cipher

Nguồn:

Keyword

  • Mã Atbash, Cryptography, Mã thay thế

Mở đầu

Atbash là một mật mã thay thế đơn giản cho bảng chữ cái của người Do Thái. Nó thay thế chữ cái đầu của bảng chữ cái aleph với chữ cái cuối tav, chữ cái beth (chứ cái thứ hai) với chữ cái shin (chữ cái trước chữ cái tav), và cứ như vậy

Mã hóa – Giải mã

Bảng mã Atbash cho bảng chữ cái Do Thái

Plain : אבגדהוזחטיכלמנסעפצקרשת
Cipher: תשרקצפעסנמלכיטחזוהדגבא

Bảng mã Atbash cho bảng chữ cái Latin

 Plain:  ABCDEFGHIJKLMNOPQRSTUVWXYZ
 Cipher: ZYXWVUTSRQPONMLKJIHGFEDCBA

Để mã hóa hay giải mã, ta chỉ việc thay ký tự từ dòng Plain sang ký tự tương ứng với nó ở dòng Cipher. Ví dụ A thay thế cho Z, B thay thế cho Y,… Rất đơn giản!

Ví dụ

Khi mã hóa văn bản gốc “MONEY” theo mã Atbash, ta được bản mã “NLMVB”

Thú vị: Một vài từ Tiếng Anh khi mã hóa theo mã Atbash được một từ có nghĩa khác. Như "hob" = "sly", "hold"="slow", "holy"="slob", "zoo"="all"

Mật mã Atbash trong lịch sử

Mã Atbash là một mật mã cổ xưa. Vào những năm 500 trước công nguyên, những người soạn kinh thánh (scribes) đã viết quyển sách Book of Jeremiah, đây là quyển kinh thánh thứ hai của người Do Thái. Trong quyển sách này, những người soạn đã sử dụng mật mã Atbash để mã hóa một số từ như  לב קמי (Lev Kamai – 51:1) được giải mã là כשדים (Kasdim – Chaldeans), hay ששך (Sheshakh 25:26; 51:41) được giải mã là  בבל (Bavel – Babylon)