Phương pháp mã hóa dữ liệu - blog lập trình viên web. Giới thiệu những kiến ​​thức cơ bản về mật mã khóa đối xứng hiện đại

Như bạn còn nhớ, phép dịch chuyển, thay thế, hoán vị và mật mã Vernam áp dụng một thao tác cho từng ký tự cụ thể của văn bản. Chúng ta cần dịch chuyển - chúng ta dịch chuyển ký tự, áp dụng khóa - áp dụng nó cho ký tự, sau đó cho ký tự tiếp theo, v.v., cho đến khi chúng ta mã hóa tất cả các ký tự văn bản gốc. Phương thức mã hóa này được gọi là mã hóa luồng - chúng tôi mã hóa từng ký tự riêng biệt. Một cách tiếp cận khác là chia bản rõ gốc thành các nhóm gồm nhiều ký tự (khối) và thực hiện các thao tác mã hóa trên mỗi khối. Đây là một phương pháp mã hóa khối.

Để làm rõ sự khác biệt giữa mật mã khối và mật mã dòng, chúng tôi sẽ đưa ra một ví dụ sử dụng mật mã thay thế đơn giản.

Mã hóa luồng

Hãy mã hóa từ CIPHER bằng mật mã luồng thay thế:

Chúng tôi đã mã hóa từng ký tự và thu được một bản mã. Dễ như ăn bánh.

MÃ HÓA KHỐI

Hãy mã hóa từ AVADAKDAVRA. Vì mật mã là khối một nên chúng ta sẽ chia bản rõ thành các khối gồm bốn ký tự: AVAD | KIẾM | AVRA (trong thực tế, khối văn bản bao gồm 64-256 bit). Đối với mỗi khối, chúng tôi sẽ đưa ra bảng thay thế của riêng mình:

Bây giờ chúng tôi mã hóa từng khối bằng bảng chữ cái tương ứng:
Nó hóa ra tốt hơn một chút so với phương pháp nội tuyến, nếu chúng ta nói về độ bền. Rốt cuộc, chúng tôi đã học cách giải mã mật mã thay thế thông thường bằng một tay trái. Và với cách tiếp cận khối như vậy, kẻ tấn công sẽ phải vắt óc trước khi có thể chọn độ dài khối và sau đó áp dụng phương pháp phân tích mật mã để tìm mật mã thay thế cho mỗi khối.

MẠNG FEISTEL

Bây giờ chúng ta đã sẵn sàng chuyển sang một chủ đề rất quan trọng mở ra cánh cửa đến một thế giới rộng lớn hệ thống hiện đại mã hóa. Mạng Feistel là một phương pháp mã hóa khối được phát triển bởi Horst Feistel tại phòng thí nghiệm IBM vào năm 1971. Ngày nay mạng lưới Feistel làm nền tảng số lượng lớn các giao thức mật mã. Chúng ta hãy thử tìm hiểu "trên ngón tay" nó là gì.

Mạng Feistel hoạt động trên các khối văn bản gốc, vì vậy chúng ta sẽ xem xét cơ chế hoạt động của nó trên một trong các khối. Các thao tác đối với các khối còn lại sẽ tương tự.

  • Khối được chia thành hai phần bằng nhau - trái (L) và phải (R).
  • Sau khi phân vùng, khối con bên trái được sửa đổi bởi hàm f sử dụng khóa K: x = f(L, K). Với tư cách là một hàm, bạn có thể tưởng tượng bất kỳ phép biến đổi nào bạn thích - ví dụ: mật mã dịch chuyển cũ tốt với khóa K.
  • Khối con kết quả được thêm modulo 2 với khối con bên phải R, khối con này chưa được sử dụng trước đây: x=x+R
  • Tiếp theo, các bộ phận kết quả được hoán đổi và dán lại với nhau.

Như bạn có thể thấy, mọi thứ khá đơn giản. Để hiểu cách thức hoạt động của nó, hãy nhìn vào sơ đồ:

Sự sắp xếp này được gọi là tế bào Feistel. Bản thân mạng Feistel bao gồm một số ô. Các khối con thu được ở đầu ra của ô thứ nhất sẽ chuyển đến đầu vào của ô thứ hai, các khối con kết quả từ ô thứ hai sẽ chuyển đến đầu vào của ô thứ ba, v.v., tùy thuộc vào số vòng của mạng Feistel. Trong mỗi vòng như vậy, một phím tròn xác định trước sẽ được sử dụng. Thông thường, các khóa tròn được tạo từ khóa bí mật chính K. Khi tất cả các vòng đã hoàn thành, các khối văn bản con được dán lại với nhau và thu được một bản mã bình thường.

Bây giờ chúng ta hãy xem hoạt động của mạng Feistel bằng một ví dụ. Hãy lấy từ AVADAKDAVRA và chia nó thành hai khối sáu ký tự - AVADAK | EDAVRA. Đối với hàm, chúng ta lấy mật mã dịch chuyển theo số vị trí được xác định bằng phím tròn. Đặt khóa bí mật K = . Là các phím tròn, chúng ta lấy K = 1, K = 2. Để cộng modulo 2, chúng ta chuyển văn bản thành mã nhị phân theo bảng chữ cái điện báo mà hiếm ai sử dụng.

Đây là những gì đã xảy ra:

Bây giờ hãy chạy khối đầu tiên qua mạng Feistel theo hai vòng:

Hãy thử tự mã hóa khối thứ hai, tôi đã nhận được MOOSSTR.

Việc giải mã được thực hiện theo cách tương tự: văn bản mã hóa được chia thành các khối và sau đó là các khối con, khối con bên trái nhập vào hàm, được thêm modulo 2 với khối con bên phải, sau đó các khối con được hoán đổi. Sự khác biệt là các phím tròn được cung cấp theo thứ tự ngược lại, nghĩa là, trong trường hợp của chúng tôi, ở vòng đầu tiên, chúng tôi sẽ sử dụng khóa K = 2, và sau đó ở vòng thứ hai K = 1.

Nghiên cứu trên mạng Feistel đã chỉ ra rằng với các khóa tròn độc lập và hàm giả ngẫu nhiên kháng mật mã f, ba vòng của mạng Feistel sẽ đủ để văn bản mã hóa là giả ngẫu nhiên. Điều này cho thấy mật mã dựa trên mạng Feistel hiện khá an toàn.

GOST 28147-89 (MAGMA)

Hầu hết mọi thứ đều đã có trong kho vũ khí những khái niệm cần thiết, vì vậy chúng ta đã sẵn sàng chuyển sang chủ đề quan trọng đầu tiên về mật mã trong nước - GOST 28147-89. Điều đáng nói là chỉ có những kẻ lười biếng mới không viết về tiêu chuẩn này, vì vậy tôi sẽ cố gắng lần thứ một triệu và lần đầu tiên để trình bày ngắn gọn và không có một đám mây công thức nào phác thảo bản chất của các chế độ mã hóa của Magma vĩ đại và khủng khiếp. Nếu bạn quyết định tự đọc tiêu chuẩn, thì bạn nên dự trữ thời gian, sức lực, sự kiên nhẫn và thức ăn, bởi vì, như bạn biết, việc viết tiêu chuẩn bằng ngôn ngữ của con người bị nghiêm cấm.

Đặc điểm chính: khóa 256 bit, khối 64 bit.

Trước khi phân tích Magma, bạn cần tìm hiểu một khái niệm mới - bảng thay thế hoặc hộp S. Đây là loại bảng giống như bảng trong mật mã thay thế. Được thiết kế để thay thế các ký hiệu khối con bằng các ký hiệu được ghi trong bảng. Đừng nghĩ rằng hộp S là các số ngẫu nhiên được tạo bởi hàm rand(). Hộp S là kết quả của các chuỗi được tạo ra một cách chu đáo, bởi vì sức mạnh mật mã của toàn bộ mật mã dựa trên chúng.

GOST 28147 mô tả rất ít các bảng thay thế của nó. Nó chỉ nói rằng chúng là một yếu tố bí mật bổ sung (cùng với chìa khoá bí mật) và "vận chuyển vào theo cách thức quy định" Không có gì khác. Kể từ khi áp dụng GOST 28147, sự không chắc chắn về mặt khoa học và kỹ thuật liên quan đến việc lựa chọn hộp S đã làm nảy sinh những tin đồn và suy đoán. Đã có cuộc nói chuyện về các tiêu chí bí mật chỉ được biết đến bởi các nhà phát triển GOST. Đương nhiên, sự không chắc chắn này làm giảm niềm tin vào hệ thống mật mã.

Sự thiếu sót này đã tạo cơ sở tuyệt vời để chỉ trích tiêu chuẩn. Nhà mật mã học người Pháp Nicolas Courtois đã xuất bản một số bài báo chứa một số điều khoản gây tranh cãi liên quan đến sức mạnh của GOST. Courtois cho rằng tiêu chuẩn Nga rất dễ bị tấn công và không thể coi là quốc tế. Tuy nhiên, Courtois thực hiện phân tích của mình đối với các hộp S không phải là hộp thực tế, vì vậy bạn không nên dựa vào ý kiến ​​​​của anh ấy.

Bây giờ hãy xem họ nghĩ ra điều gì bên trong những bức tường của Lubyanka u ám.

Chế độ thay thế dễ dàng

Ở chế độ thay thế đơn giản 32 vòng, theo tiêu chuẩn chúng ta cần 32 phím tròn. Để tạo khóa tròn, khóa 256 bit ban đầu được chia thành 8 khối 32 bit: K1...K8. Các phím K9...K24 là sự lặp lại theo chu kỳ của các phím K1...K8. Các phím K25…K32 là các phím K8…K1.

  1. Mỗi khối 64 bit được chia thành hai khối con - Ai và Bi.
  2. Khối con bên trái Ai được thêm modulo 232 bằng phím tròn K1: Ai+1 = Ai + Ki mod 232.
  3. Khối con bên trái đi qua hộp S.
  4. Các bit của khối con bên trái được dịch chuyển 11 vị trí (dịch chuyển theo chu kỳ).
  5. Khối con bên trái cộng với khối bên phải theo modulo 2: A = A ⊕ B . iii
  6. Khối con bên phải chấp nhận nghĩa gốc khối con bên trái: Bi+1 = Ai.
  7. Các khối con được hoán đổi.

Chỉ là một ví dụ về một vòng. Khóa 256 bit:

arvadek adava arvadek adava arvadek adava arvadek adava arva

00011 01010 11110 00011 01001 00001 01111 00011 01001 00011 11110

00011... . . . 00011 01010 11110 0

Sau đó, các phím tròn

K1 = 00011 01010 11110 00011 01001 00001 01

K2 = 111 00011 01001 00011 11110 00011 0001

K3 = . . .

S - hộp= [ 1 , 15 , 13 , 0 , 5 , 7 , 10 , 4 , 9 , 2 , 3 , 14 , 6 , 11 , 8 , 12 ]

Làm thế nào để sử dụng hộp S này? Rất đơn giản! Nếu đầu vào của S-box là 0 thì đầu ra sẽ là 1 (lấy ký hiệu thứ 0 của S-box), nếu 4 thì đầu ra sẽ là 5 (lấy ký hiệu thứ 4), nếu đầu vào là 7 , thì đầu ra sẽ là 4, v.v.

Văn bản thô:

Được chia thành hai khối 32 bit gồm bit cao và bit thấp:

Tất nhiên, ví dụ này hóa ra rất hoang đường, bởi vì GOST vẫn chưa phải là một tiêu chuẩn mà mọi người đều có thể tự mình trải qua.

Chế độ thay thế đơn giản quá đơn giản và có những nhược điểm đáng kể:

  • một lỗi trong khối được mã hóa sẽ làm hỏng tất cả các bit của khối đó;
  • khi mã hóa các khối văn bản gốc giống hệt nhau, người ta sẽ nhận được khối giống hệt nhau bản mã, có thể cung cấp thông tin nhất định cho người giải mã.

Vì vậy, chỉ nên sử dụng GOST 28147-89 ở chế độ thay thế đơn giản để mã hóa dữ liệu chính.

CHẾ ĐỘ CHƠI GAME

Chế độ này không có nhược điểm của chế độ thay thế đơn giản. Chế độ gamma được gọi như vậy vì nó sử dụng gamma, một chuỗi giả ngẫu nhiên được thêm modulo 2 vào bản rõ trong mỗi vòng. Gamma được hình thành từ thông điệp đồng bộ hóa S - một chuỗi giả ngẫu nhiên thay đổi theo mỗi lần lặp và được mã hóa ở chế độ thay thế đơn giản, sau đó nó chuyển thành gamma và được đặt chồng lên bản rõ.

Và bây giờ mọi thứ đã theo thứ tự.

Các bước 3–5 được lặp lại cho mỗi khối. Tất cả những thao tác này có thể được nhìn thấy trong sơ đồ.

Việc giải mã được thực hiện theo cách tương tự; thay vì khối văn bản gốc, khối văn bản mã hóa được cung cấp.

Chế độ Gamma có phản hồi

Hãy phức tạp hơn. Thuật toán cũng tương tự như chế độ gamma nhưng gamma được hình thành dựa trên khối dữ liệu được mã hóa trước đó nên kết quả mã hóa của khối hiện tại cũng phụ thuộc vào các khối trước đó. 1. Thông báo đồng bộ S - Chuỗi giả ngẫu nhiên 64 bit.

2. S được mã hóa ở chế độ thay thế đơn giản.
3. Bản rõ được thêm modulo 2 vào gamma thu được.
4. Bản mã thu được sẽ được gửi dưới dạng thông báo đồng bộ hóa cho khối tiếp theo và cũng được gửi đến đầu ra. Bạn có thể thấy nó trông như thế nào trong sơ đồ.

Chế độ chèn mô phỏng

Trong chế độ này, một phần chèn mô phỏng được tạo ra - một khối bổ sung có độ dài cố định, tùy thuộc vào văn bản nguồn và chìa khóa. Khối nhỏ như vậy là cần thiết để xác nhận rằng không có biến dạng nào được đưa vào bản mã một cách vô tình hay cố ý - tức là để kiểm tra tính toàn vẹn. Chế độ này hoạt động như sau:

1. Một khối bản rõ trải qua 16 vòng ở chế độ thay thế đơn giản.
2. Một khối văn bản gốc khác được thêm vào khối kết quả modulo 2.
3. Tổng số này trải qua 16 vòng khác ở chế độ thay thế đơn giản.
4. Khối bản rõ tiếp theo được thêm vào và một lần nữa thay thế đơn giản, v.v. cho đến khi không còn khối bản rõ nào nữa.

Để xác minh, người nhận sau khi giải mã văn bản sẽ thực hiện một quy trình tương tự như mô tả. Nếu kết quả không khớp với phần chèn bắt chước được truyền đi, tất cả M khối tương ứng được coi là sai.

GOST 34.12-2015 (GRASSHOPPER)

Nhiều người cho rằng GOST 28147-89 đã lỗi thời và chưa đủ mạnh so với các thuật toán nước ngoài. Để thay thế nó, các nhà mật mã trong nước đã đưa ra một tiêu chuẩn mã hóa mới. Họ nói rằng điều này xảy ra do số lượng lớn các cuộc tấn công vào GOST cũ hoặc do độ dài khối này đã lỗi thời và quá nhỏ đối với các tập dữ liệu hiện đại. Những lý do thực sự không ai quảng cáo. Tất nhiên, có một số thay đổi về các đặc điểm chính.

Đặc điểm chính: khóa 256 bit, khối 128 bit.

Cũng cần phải nói rằng trong tiêu chuẩn mới, các hộp S đã được cố định và cân nhắc kỹ lưỡng nên bạn không cần phải phát minh ra các phương án thay thế ngẫu nhiên kỳ diệu của riêng mình. GOST mới có nhiều chế độ mã hóa hơn:
chế độ thay thế đơn giản (Sổ mã điện tử, ECB);
chế độ gamma (Bộ đếm, TLB);
chế độ gamma với phản hồi đầu ra (Phản hồi đầu ra, OFB);
chế độ thay thế đơn giản có tương tác (Cipher Block Chaining, SBC);
chế độ gamma với phản hồi văn bản mã hóa (Phản hồi mật mã, CFB);
chế độ tạo mô phỏng chèn (thuật toán Mã xác thực tin nhắn).

Hãy nhìn vào các chế độ mới.

Chế độ thay thế dễ dàng với sự tham gia

Như đã thấy trong tiêu chuẩn trước, chế độ thay thế đơn giản là chế độ yếu nhất trong số các chế độ, vì vậy trong tiêu chuẩn mới, giờ đây nó nhô ra và trở nên không đơn giản chút nào.

  1. Vector khởi tạo nghe có vẻ đáng sợ nhưng thực tế nó chỉ là một chuỗi bit đi vào đầu vào.
  2. Vectơ được chia thành hai phần - L và R, một trong số đó được thêm modulo 2 với bản rõ và phần còn lại trở thành một nửa vectơ khởi tạo cho khối tiếp theo.
  3. Tổng của bản rõ và một phần của vectơ khởi tạo được truyền qua một mật mã thay thế đơn giản.
  4. Các khối bản mã thu được sẽ được dán lại với nhau.

Khi bạn nhìn vào sơ đồ, mọi thứ sẽ ngay lập tức trở nên rõ ràng.

Tất nhiên, vectơ khởi tạo không đơn giản như vậy: nó trải qua một loạt các phép biến đổi tuyến tính (sử dụng thanh ghi dịch chuyển tuyến tính) trước khi bắt đầu mã hóa một khối mới. Nhưng để làm quen với mật mã, chỉ cần hình dung ra sơ đồ như vậy là đủ. Việc giải mã ở chế độ này cũng không hoàn toàn rõ ràng, vì vậy tốt hơn hết bạn nên xem sơ đồ.

Dành cho những người chuyên nghiệp - Mã hóa. Trong số những phát triển trong nước có nhà cung cấp tiền điện tử CryptoPro CSP.

Một vài lời về sức mạnh của chế độ mã hóa. Nhiều nhà mật mã nước ngoài đã cố gắng chống lại tiêu chuẩn của chúng tôi, nhưng hiện tại chưa có một cuộc tấn công nào có thể được thực hiện ở trình độ phát triển công nghệ hiện tại. Trong số các lập trình viên tiêu chuẩn này trong một khoảng thời gian dài không phổ biến lắm vì rất khó hiểu thuật toán vận hành từ văn bản của nó và không có đủ mô tả rõ ràng hơn. Nhưng hiện nay đã có rất nhiều cách triển khai bằng nhiều ngôn ngữ lập trình. Vì vậy, hiện nay việc sử dụng GOST là hoàn toàn có thể thực hiện được và ở nhiều khía cạnh, nó vượt qua các tiêu chuẩn nước ngoài. Rốt cuộc lòng yêu nước ở đâu?!

Trong thế kỷ 21, mật mã đóng một vai trò quan trọng trong cuộc sống số người hiện đại. Chúng ta hãy xem xét ngắn gọn các cách để mã hóa thông tin.

Mật mã không chỉ là một thứ gì đó trên máy tính

Rất có thể bạn đã gặp phải mật mã cơ bản và có thể biết một số phương pháp mã hóa. Ví dụ, Mật mã Caesar thường được sử dụng trong các trò chơi giáo dục dành cho trẻ em.

ROT13 là một loại mã hóa tin nhắn phổ biến khác. Trong đó, mỗi chữ cái trong bảng chữ cái được dịch chuyển 13 vị trí, như thể hiện trong hình:

Như bạn có thể thấy, mật mã này không thực sự cung cấp bảo vệ đáng tin cậy thông tin: nó đơn giản và ví dụ rõ ràng toàn bộ ý tưởng về mật mã.

Ngày nay chúng ta nói về mật mã thường xuyên nhất trong bối cảnh của một số công nghệ. Thông tin cá nhân và tài chính được truyền đi một cách an toàn như thế nào khi chúng tôi mua hàng trực tuyến hoặc xem tài khoản ngân hàng? Làm cách nào để lưu trữ dữ liệu một cách an toàn để không ai có thể chỉ cần mở máy tính, rút ​​ổ cứng ra và có toàn quyền truy cập với tất cả thông tin về nó? Chúng tôi sẽ trả lời những câu hỏi này và những câu hỏi khác trong bài viết này.

Định nghĩa và hướng dẫn nhanh về an ninh mạng

Trong an ninh mạng, có một số điều khiến người dùng lo lắng khi liên quan đến bất kỳ dữ liệu nào. Chúng bao gồm tính bảo mật, tính toàn vẹn và tính sẵn có của thông tin.

Bảo mật– dữ liệu không thể được nhận hoặc đọc bởi người dùng trái phép.

Tính toàn vẹn thông tin– tin tưởng rằng thông tin sẽ còn nguyên vẹn 100% và sẽ không bị kẻ tấn công thay đổi.

Sự sẵn có của thông tin– có quyền truy cập vào dữ liệu khi cần thiết.

Bài viết này cũng sẽ xem xét các dạng mật mã kỹ thuật số khác nhau và cách chúng có thể giúp đạt được các mục tiêu được liệt kê ở trên.

Các phương pháp mã hóa cơ bản:
  • đối xứng
  • không đối xứng
  • Băm
  • Chữ ký số

Mã hóa đối xứng

Trước khi đi sâu vào chủ đề, chúng ta hãy trả lời một câu hỏi đơn giản: “mã hóa” chính xác nghĩa là gì? Mã hóa là việc chuyển đổi thông tin để che giấu nó khỏi những người không được ủy quyền, đồng thời cho phép người dùng được ủy quyền truy cập vào nó.

Để mã hóa và giải mã dữ liệu đúng cách, bạn cần hai thứ: dữ liệu và khóa giải mã. Khi sử dụng mã hóa đối xứng, khóa để mã hóa và giải mã dữ liệu là như nhau. Hãy lấy một chuỗi và mã hóa nó bằng Ruby và OpenSSL:

hồng ngọc

require "openssl" require "pry" data_to_encrypt = "ngay bây giờ bạn có thể hãy đọc tôi!" cipher = OpenSSL::Cipher.new("aes256") cipher.encrypt key = cipher.random_key iv = cipher.random_iv data_to_encrypt = cipher.update(data_to_encrypt) + cipher.final bind.pry true

yêu cầu "openssl"

yêu cầu "cọc"

mật mã = ​​OpenSSL::Cipher. mới("aes256")

mật mã mã hóa

khóa = mật mã. ngẫu nhiên_key

iv = mật mã. ngẫu nhiên_iv

data_to_encrypt = mật mã. cập nhật (data_to_encrypt) + mật mã. cuối cùng

ràng buộc. nâng lên

ĐÚNG VẬY

Đây là những gì chương trình sẽ xuất ra:

Xin lưu ý rằng biến dữ liệu_to_encrypt, ban đầu là dòng "bây giờ bạn có thể đọc được tôi!" giờ là một loạt các ký tự lạ. Hãy đảo ngược quá trình bằng cách sử dụng khóa ban đầu được lưu trữ trong một biến chìa khóa.

Sau khi sử dụng cùng khóa mà chúng tôi đã đặt để mã hóa, chúng tôi giải mã tin nhắn và nhận được chuỗi gốc.

Hãy xem xét các phương pháp mã hóa khác.

Mã hóa bất đối xứng

Vấn đề với mã hóa đối xứng là: giả sử bạn cần gửi một số dữ liệu qua Internet. Nếu cần có cùng một khóa để mã hóa và giải mã dữ liệu thì hóa ra khóa đó phải được gửi trước. Điều này có nghĩa là khóa sẽ cần được gửi qua kết nối không an toàn. Nhưng bằng cách này, khóa có thể bị bên thứ ba chặn và sử dụng. Để tránh kết quả này, mã hóa bất đối xứng đã được phát minh.

Để sử dụng mã hóa bất đối xứng, bạn cần tạo hai khóa có liên quan về mặt toán học. Một là khóa riêng mà chỉ bạn mới có quyền truy cập. Thứ hai là mở, có sẵn công khai.

Hãy xem một ví dụ về giao tiếp sử dụng mã hóa bất đối xứng. Trong đó, máy chủ và người dùng sẽ gửi tin nhắn cho nhau. Mỗi người trong số họ có hai khóa: riêng tư và công khai. Người ta đã nói trước đó rằng các phím được kết nối. Những thứ kia. Một tin nhắn được mã hóa bằng khóa riêng chỉ có thể được giải mã bằng khóa chung liền kề. Do đó, để bắt đầu liên lạc, bạn cần trao đổi khóa chung.

Nhưng làm thế nào bạn có thể hiểu rằng khóa chung của máy chủ thuộc về máy chủ cụ thể này? Có một số cách để giải quyết vấn đề này. Phương pháp phổ biến nhất (và phương pháp được sử dụng trên Internet) là sử dụng cơ sở hạ tầng khóa công khai (PKI). Trong trường hợp các trang web, có Cơ quan cấp chứng chỉ, có một thư mục gồm tất cả các trang web đã cấp chứng chỉ và khóa công khai. Khi bạn kết nối với một trang web, khóa công khai của trang web đó trước tiên sẽ được cơ quan cấp chứng chỉ xác minh.

Hãy tạo một cặp khóa chung và khóa riêng:

hồng ngọc

require "openssl" require "pry" data_to_encrypt = "bây giờ bạn có thể đọc được thông tin của tôi!" key = OpenSSL::PKey::RSA.new(2048) bind.pry true

yêu cầu "openssl"

yêu cầu "cọc"

data_to_encrypt = "bây giờ bạn có thể đọc được tôi!"

khóa = OpenSSL::PKey::RSA. mới (2048 )

ràng buộc. nâng lên

ĐÚNG VẬY

Nó sẽ bật ra:

Lưu ý rằng khóa riêng và khóa chung là các thực thể riêng biệt có mã định danh khác nhau. sử dụng #private_encrypt, bạn có thể mã hóa chuỗi bằng cách sử dụng khóa riêng, và sử dụng #public_decrypt– Giải mã tin nhắn:

Băm thông tin

Băm, không giống như mã hóa đối xứng và bất đối xứng, là hàm một chiều. Có thể tạo hàm băm từ một số dữ liệu, nhưng không có cách nào đảo ngược quá trình. Điều này làm cho việc băm không phải là một cách thuận tiện để lưu trữ dữ liệu, nhưng nó phù hợp để kiểm tra tính toàn vẹn của một số dữ liệu.

Hàm lấy một số thông tin làm đầu vào và xuất ra một chuỗi dường như ngẫu nhiên và luôn có cùng độ dài. Hàm băm lý tưởng tạo ra các giá trị duy nhất cho đầu vào khác nhau. Đầu vào giống nhau sẽ luôn tạo ra cùng một hàm băm. Do đó, băm có thể được sử dụng để xác minh tính toàn vẹn dữ liệu.

Mã hóa dữ liệu là cực kỳ quan trọng để bảo vệ sự riêng tư. Trong bài viết này tôi sẽ nói về nhiều loại khác nhau và các phương pháp mã hóa được sử dụng để bảo vệ dữ liệu ngày nay.

Bạn có biết không?
Trở lại thời La Mã, mã hóa đã được Julius Caesar sử dụng để làm cho kẻ thù không thể đọc được các bức thư và tin nhắn. Nó đóng một vai trò quan trọng như một chiến thuật quân sự, đặc biệt là trong chiến tranh.

Khi khả năng của Internet tiếp tục phát triển, ngày càng có nhiều hoạt động kinh doanh của chúng ta được tiến hành trực tuyến. Trong số này, quan trọng nhất là ngân hàng Internet, thanh toán trực tuyến, email, trao đổi riêng tư và tin nhắn chính thức v.v., liên quan đến việc trao đổi dữ liệu và thông tin bí mật. Nếu dữ liệu này rơi vào tay kẻ xấu, nó có thể gây ra tác hại không chỉ người dùng cá nhân, nhưng cũng có tất cả hệ thống trực tuyến việc kinh doanh.

Để ngăn chặn điều này xảy ra, một số biện pháp mạng bảo mật để bảo vệ việc truyền dữ liệu cá nhân. Đứng đầu trong số này là các quá trình mã hóa và giải mã dữ liệu, được gọi là mật mã. Có ba phương pháp mã hóa chính được sử dụng trong hầu hết các hệ thống hiện nay: mã hóa băm, mã hóa đối xứng và bất đối xứng. TRONG dòng sau, Tôi sẽ nói chi tiết hơn về từng loại mã hóa này.

Các loại mã hóa

Mã hóa đối xứng

Trong mã hóa đối xứng, dữ liệu thông thường có thể đọc được, được gọi là văn bản thuần túy, được mã hóa để trở nên không thể đọc được. Việc xáo trộn dữ liệu này được thực hiện bằng cách sử dụng một phím. Sau khi dữ liệu được mã hóa, nó có thể được gửi an toàn đến người nhận. Tại người nhận, dữ liệu được mã hóa sẽ được giải mã bằng chính khóa đã được sử dụng để mã hóa.

Vì vậy, rõ ràng rằng chìa khóa là quan trọng nhất phần quan trọng mã hóa đối xứng. Nó phải được ẩn khỏi người ngoài vì bất kỳ ai có quyền truy cập vào nó đều có thể giải mã dữ liệu riêng tư. Đây là lý do tại sao loại mã hóa này còn được gọi là "khóa bí mật".

Trong các hệ thống hiện đại, khóa thường là một chuỗi dữ liệu được lấy từ mật khẩu mạnh hoặc từ một nguồn hoàn toàn ngẫu nhiên. Nó được đưa vào phần mềm mã hóa đối xứng, sử dụng nó để giữ bí mật dữ liệu đầu vào. Việc xáo trộn dữ liệu đạt được bằng cách sử dụng thuật toán đối xứng mã hóa, chẳng hạn như Tiêu chuẩn mã hóa dữ liệu (DES), Tiêu chuẩn mã hóa nâng cao (AES) hoặc Thuật toán mã hóa dữ liệu quốc tế (IDEA).

Những hạn chế

Liên kết yếu nhất trong loại mã hóa này là tính bảo mật của khóa, cả về mặt lưu trữ và truyền tải đến người dùng được xác thực. Nếu hacker lấy được khóa này, hắn có thể dễ dàng giải mã dữ liệu được mã hóa, làm mất đi toàn bộ mục đích mã hóa.

Một nhược điểm nữa là do phần mềm, quá trình xử lý dữ liệu không thể hoạt động với dữ liệu được mã hóa. Vì vậy, để có thể sử dụng được phần mềm này thì trước tiên dữ liệu phải được giải mã. Nếu bản thân phần mềm bị xâm phạm thì kẻ tấn công có thể dễ dàng lấy được dữ liệu.

Mã hóa bất đối xứng

Mã hóa khóa bất đối xứng hoạt động tương tự như khóa đối xứng ở chỗ nó sử dụng khóa để mã hóa tin nhắn được truyền đi. Tuy nhiên, thay vì sử dụng cùng một khóa, anh ta sử dụng một khóa hoàn toàn khác để giải mã tin nhắn này.

Khóa được sử dụng để mã hóa có sẵn cho bất kỳ và tất cả người dùng mạng. Vì vậy nó được gọi là khóa "công khai". Mặt khác, khóa dùng để giải mã được giữ bí mật và chỉ dành cho mục đích sử dụng riêng tư của người dùng. Do đó, nó được gọi là khóa "riêng tư". Mã hóa bất đối xứng còn được gọi là mã hóa khóa công khai.

Vì với phương pháp này, khóa bí mật cần thiết để giải mã tin nhắn không cần phải được truyền đi mọi lúc và nó thường chỉ có người dùng (người nhận) biết nên khả năng tin tặc có thể giải mã được tin nhắn là rất lớn. thấp hơn.

Diffie-Hellman và RSA là những ví dụ về thuật toán sử dụng mã hóa khóa chung.

Những hạn chế

Nhiều hacker sử dụng man-in-the-middle như một hình thức tấn công để vượt qua kiểu mã hóa này. TRONG mã hóa bất đối xứng, bạn sẽ được cấp một khóa công khai được sử dụng để trao đổi dữ liệu một cách an toàn với người hoặc dịch vụ khác. Tuy nhiên, tin tặc sử dụng thủ thuật lừa đảo trên mạng để lừa bạn liên lạc với chúng trong khi khiến bạn tin rằng mình đang sử dụng đường dây an toàn.

Để hiểu rõ hơn về kiểu hack này, hãy xem xét hai bên tương tác, Sasha và Natasha, và một hacker, Sergei, với mục đích chặn cuộc trò chuyện của họ. Đầu tiên, Sasha gửi một tin nhắn qua mạng dành cho Natasha, yêu cầu cô cung cấp khóa công khai. Sergei chặn tin nhắn này và lấy được khóa chung liên quan đến cô ấy rồi sử dụng nó để mã hóa và gửi một tin nhắn sai cho Natasha chứa khóa chung của anh ấy thay vì của Sasha.

Natasha nghĩ rằng tin nhắn này đến từ Sasha nên mã hóa nó bằng khóa chung của Sergei và gửi lại. Tin nhắn này một lần nữa bị Sergei chặn lại, giải mã, sửa đổi (nếu muốn), mã hóa lại bằng khóa chung mà Sasha đã gửi ban đầu và gửi lại cho Sasha.

Vì vậy, khi Sasha nhận được tin nhắn này, anh ta đã tin rằng nó đến từ Natasha và không hề hay biết về hành vi chơi xấu.

Băm

Kỹ thuật băm sử dụng thuật toán được gọi là hàm băm để tạo ra một chuỗi đặc biệt từ dữ liệu đã cho, được gọi là hàm băm. Hàm băm này có các thuộc tính sau:

  • cùng một dữ liệu luôn tạo ra cùng một hàm băm.
  • Không thể tạo dữ liệu thô chỉ từ hàm băm.
  • Việc thử kết hợp các đầu vào khác nhau để tạo ra cùng một hàm băm là không thực tế.

Do đó, điểm khác biệt chính giữa băm và hai hình thức mã hóa dữ liệu còn lại là khi dữ liệu được mã hóa (băm), nó không thể được truy xuất trở lại dạng ban đầu (được giải mã). Thực tế này đảm bảo rằng ngay cả khi tin tặc có được mã băm thì nó cũng sẽ vô ích đối với anh ta vì anh ta sẽ không thể giải mã nội dung của tin nhắn.

Thông báo tóm tắt 5 (MD5) và Thuật toán băm an toàn (SHA) là hai thuật toán băm được sử dụng rộng rãi.

Những hạn chế

Như đã đề cập trước đó, gần như không thể giải mã dữ liệu từ một hàm băm nhất định. Tuy nhiên, điều này chỉ đúng nếu việc băm mạnh được thực hiện. Trong trường hợp triển khai kỹ thuật băm yếu, sử dụng đủ tài nguyên và tấn công lực lượng vũ phu, một hacker kiên trì có thể tìm thấy dữ liệu khớp với hàm băm.

Kết hợp các phương pháp mã hóa

Như đã thảo luận ở trên, mỗi phương pháp mã hóa trong số ba phương pháp mã hóa này đều có một số nhược điểm. Tuy nhiên, khi sử dụng kết hợp các phương pháp này, chúng sẽ tạo thành một phương pháp đáng tin cậy và có tính hệ thống hiệu quả mã hóa.

Thông thường, các kỹ thuật khóa riêng và khóa chung được kết hợp và sử dụng cùng nhau. Phương thức khóa riêng cho phép giải mã nhanh hơn, trong khi phương thức khóa chung cung cấp giải pháp an toàn hơn và hiệu quả hơn. Một cách thuận tiệnđể chuyển khóa bí mật. Sự kết hợp các phương pháp này được gọi là "phong bì kỹ thuật số". Chương trình mã hóa điện tử Thư PGP dựa trên kỹ thuật "phong bì kỹ thuật số".

Băm được sử dụng như một phương tiện để kiểm tra độ mạnh của mật khẩu. Nếu hệ thống lưu trữ hàm băm của mật khẩu thay vì chính mật khẩu thì nó sẽ an toàn hơn, vì ngay cả khi tin tặc có được hàm băm này, anh ta cũng sẽ không thể hiểu (đọc) nó. Trong quá trình xác minh, hệ thống sẽ kiểm tra hàm băm của mật khẩu đến và xem kết quả có khớp với những gì được lưu trữ hay không. Bằng cách này, mật khẩu thực tế sẽ chỉ hiển thị trong những khoảnh khắc ngắn ngủi khi nó cần được thay đổi hoặc xác minh, giúp giảm đáng kể khả năng nó rơi vào tay kẻ xấu.

Băm cũng được sử dụng để xác thực dữ liệu bằng khóa bí mật. Một hàm băm được tạo bằng cách sử dụng dữ liệu và khóa này. Do đó, chỉ có dữ liệu và hàm băm được hiển thị và bản thân khóa không được truyền đi. Bằng cách này, nếu những thay đổi được thực hiện đối với dữ liệu hoặc hàm băm, chúng sẽ dễ dàng được phát hiện.

Tóm lại, những kỹ thuật này có thể được sử dụng để mã hóa dữ liệu một cách hiệu quả thành định dạng không thể đọc được để đảm bảo dữ liệu được an toàn. Hầu hết các hệ thống hiện đại thường sử dụng kết hợp các phương pháp mã hóa này cùng với triển khai mạnh mẽ các thuật toán để cải thiện tính bảo mật. Ngoài bảo mật, các hệ thống này còn cung cấp nhiều lợi ích bổ sung, chẳng hạn như xác minh danh tính người dùng và đảm bảo rằng dữ liệu nhận được không thể bị giả mạo.

Lần trước bạn đã làm quen với những mật mã nội địa hay và khủng khiếp. Đây là một bài học rất khó vì các hệ thống mật mã này bảo vệ bí mật quốc gia. Bạn có thể cho tôi biết điều gì phức tạp hơn không? Nhưng ở đây, làm ơn! Trên thực tế, bạn không nên sợ hãi, lần này chúng ta sẽ không đi sâu vào toán học và xem xét các chế độ mã hóa - bạn đã học được nguyên tắc của chúng (hoặc chưa). Hãy điểm qua những mật mã hàng đầu của nước ngoài và xem chúng được sử dụng như thế nào trong thực tế.

Lộ trình

Đây là bài học thứ tư trong loạt bài “Đi sâu vào tiền điện tử”. Tất cả các bài học trong bộ theo thứ tự thời gian:

  • Các nguyên tắc cơ bản và lập trình lịch sử. Cách thức hoạt động của máy dịch chuyển, thay thế, Richard Sorge, Vernam và mật mã (và được phân tích)
  • Nó là gì, việc phân phối khóa được thực hiện như thế nào và cách chọn khóa mạnh
  • Mạng Feistel là gì và mạng nội địa là gì? khối mật mã, được sử dụng trong các giao thức hiện đại - GOST 28147-89, “Grasshopper”
  • Bài 4. Mật mã nước ngoài hiện đại. Sự khác biệt giữa 3DES, AES, Blowfish, IDEA, Threefish của Bruce Schneier và cách chúng hoạt động (bạn có ở đây không)
  • Các loại chữ ký điện tử cách chúng hoạt động và cách sử dụng chúng
  • Bài 6. Mật mã lượng tử. Nó là gì, được sử dụng ở đâu và nó giúp ích như thế nào trong việc phân phối, tạo khóa bí mật Số ngẫu nhiên và chữ ký điện tử

3DES

Vì vậy, trước tiên trong loạt mật mã nước ngoài, hãy xem xét 3DES, hay đúng hơn là DES (Tiêu chuẩn mã hóa dữ liệu) tương đối gần nhất của nó, mặc dù không còn được sử dụng như vậy nhưng là tổ tiên của 3DES.

DES được phát triển bởi một nhóm các nhà toán học tại Phòng thí nghiệm Nghiên cứu IBM, trong đó có Feistel vốn đã quen thuộc. Phiên bản đầu tiên của mật mã được đặt tên là "Lucifer", nhưng sau đó nó đã được sửa đổi và cuối cùng được sử dụng làm Thuật toán mã hóa dữ liệu chính thức (DEA). Nó vẫn là tiêu chuẩn thế giới trong hơn 20 năm trước khi được thay thế bởi Triple DES.

Hãy xem thuật toán hoạt động như thế nào mã hóa DES. Để làm được điều này, bạn cần nhớ hoạt động của mạng Feistel. DES là mạng Feistel 16 vòng với các khóa mã hóa đối xứng. Độ dài của khối văn bản là 64 bit, độ dài của khóa tròn là 48 bit. Vì vậy, chúng ta hãy thực hiện các bước chính của mã hóa DES, bỏ qua khía cạnh toán học khắc nghiệt:

  1. Văn bản, giống như bất kỳ mã hóa nào khác, được chia thành các khối 64 bit.
  2. Từ khóa 56 bit sẽ tạo ra 16 khóa tròn 48 bit.
  3. Mỗi khối trải qua hoán vị, nghĩa là tất cả các bit của khối đầu vào được xáo trộn theo một bảng nhất định.
  4. Khối được chia thành hai nửa và đi vào mạng Feistel quen thuộc, nơi cuộn 16 vòng.
  5. Chúng tôi kết nối các nửa.
  6. Và một sự thay đổi nữa.

Hoán vị bắt đầu và kết thúc không có ý nghĩa gì đối với mật mã trong DES. Cả hai hoán vị đều không có khóa và các bảng cho chúng được xác định trước. Lý do chúng được đưa vào DES vẫn chưa rõ ràng và các nhà thiết kế DES cũng chưa nói gì về điều đó. Có thể giả định rằng thuật toán đã được lên kế hoạch triển khai trong phần cứng (trên chip) và hai hoán vị phức tạp này sẽ gây khó khăn cho việc mô phỏng cơ chế mã hóa trong phần mềm.

Trên thực tế, đây là tất cả những gì bạn cần biết về hoạt động của thuật toán DES. Nếu chúng ta nghiên cứu sâu hơn về cách hoạt động của chức năng được xác định trong mạng Feistel thì mọi thứ về nó đều ổn. Nó thực hiện cả hoán vị và thay thế (hộp S, như bạn có thể nhớ từ bài viết trước) và phép cộng bằng phím tròn.

Nhưng hãy quay trở lại với bộ ba DES, hay bộ ba DES. Nó trở nên cần thiết vì khóa DES 56-bit rất dễ bị tấn công và với sự phát triển khả năng tính toán vấn đề này ngày càng trở nên gay gắt hơn. Sử dụng công nghệ hiện nay, một triệu khóa có thể được xác minh mỗi giây. Điều này có nghĩa là sẽ mất hơn hai nghìn năm để giải mã DES bằng cách sử dụng một máy tính chỉ có một bộ xử lý.

Nhưng nếu chúng ta lấy một máy tính có một triệu lõi xử lý sẽ xử lý các khóa song song, chúng ta có thể kiểm tra toàn bộ bộ khóa trong khoảng 20 giờ. Khi DES được giới thiệu, giá của một chiếc máy tính như vậy là vài triệu đô la, nhưng nó nhanh chóng giảm xuống. Máy tính đặc biệtđược tạo ra vào năm 1998 - và tìm thấy chìa khóa sau 112 giờ.

Để giải quyết vấn đề tìm kiếm nhanh key, các nhà mật mã thông minh nước ngoài đã đề xuất sử dụng hai khóa và sử dụng DES hai lần. Tuy nhiên, DES kép rất dễ bị tấn công giữa chừng. Để thực hiện cuộc tấn công này, kẻ tấn công cần có bản rõ và bản mã tương ứng. Kẻ tấn công mã hóa bản rõ bằng tất cả các khóa có thể, ghi kết quả vào Bảng 1. Sau đó giải mã bản mã bằng tất cả các khóa có thể và ghi kết quả vào Bảng 2. Sau đó, kẻ tấn công tìm kiếm Bảng 1 và 2 để tìm kết quả trùng khớp.

Tấn công thuộc loại này bao gồm việc liệt kê các khóa ở mặt bản mã và văn bản gốc và yêu cầu tính toán nhiều hơn khoảng bốn lần so với việc liệt kê khóa DES thông thường và khá nhiều bộ nhớ để lưu trữ các kết quả trung gian. Tuy nhiên, trên thực tế, cuộc tấn công này có thể thực hiện được nên Double DES không thể sử dụng được.

Mọi thứ hoàn toàn khác với Triple DES. Việc sử dụng ba khóa và áp dụng các thuật toán theo trình tự được chỉ ra trong sơ đồ đã kéo dài tuổi thọ của DES thêm vài năm nữa.


DES tuyệt vời

Vậy DES có gì tuyệt vời? Thuật toán mã hóa này đã được phân tích sâu rộng. DES có hai rất phẩm chất quan trọng mật mã khối - tuyết lở và đầy đủ. Đã đến lúc mở rộng vốn từ vựng về mật mã của bạn!
Hiệu ứng tuyết lở có nghĩa là những thay đổi nhỏ trong văn bản gốc (hoặc khóa) có thể gây ra những thay đổi lớn trong văn bản mã hóa.

DES đã được chứng minh là có tất cả các đặc điểm nổi bật của đặc tính này.

Mặc dù hai khối văn bản gốc chỉ khác nhau ở bit ngoài cùng bên phải, nhưng các khối văn bản mã hóa khác nhau 29 bit. Điều này có nghĩa là sự thay đổi khoảng 1,5% bản rõ sẽ gây ra sự thay đổi khoảng 45% bản mã.

Hiệu ứng đầy đủ là mỗi bit của bản mã phải phụ thuộc vào nhiều bit của bản rõ. Như chúng ta đã biết, DES sử dụng cả hoán vị và thay thế - tất cả các phép biến đổi đều thiết lập sự phụ thuộc của từng bit bản mã vào một số bit của văn bản gốc.

DES được sử dụng ở đâu? Có, hầu hết mọi nơi, việc triển khai nó đều có mặt trong hầu hết các thư viện phần mềm. Tuy nhiên, ai biết được mức độ an toàn khi sử dụng DES ngày nay? Mặc dù IBM tuyên bố rằng thuật toán này là kết quả của 17 năm phân tích mật mã chuyên sâu, một số người lo ngại rằng NSA đã chèn một lỗ hổng vào thuật toán cho phép cơ quan này dễ dàng giải mã các tin nhắn bị chặn. Ủy ban Tình báo Thượng viện Hoa Kỳ đã nghiên cứu kỹ lưỡng vấn đề này và tất nhiên không tìm thấy gì, các cáo buộc chống lại NSA đã được bãi bỏ và kết quả của nghiên cứu vẫn được phân loại. Nói một cách dễ hiểu, những tin đồn và suy đoán đã lan truyền khắp nước Mỹ trong một thời gian dài về việc liệu DES có nên được tin cậy hay không. Nhưng, theo tôi tin, tình huống ở đây được mô tả bằng câu nói “Người thông minh sẽ không nói, kẻ ngốc sẽ không hiểu”. Cuối cùng, NSA thừa nhận rằng họ không thể tin tưởng IBM giao một nhiệm vụ quan trọng như vậy và đã thực hiện một số điều chỉnh, chẳng hạn như chỉ định các hộp S.

Trong suốt sự tồn tại của DES, anh ta đã là mục tiêu của Các phương pháp khác nhau phân tích mật mã. Các nhà phân tích mật mã không bao giờ ngừng thử nghiệm các máy phá DES để xem sẽ mất bao lâu để giải mã một văn bản. Về vấn đề này, vô số sửa đổi khác nhau của thuật toán này đã xuất hiện và 3DES không phải là sửa đổi phức tạp nhất trong số đó.

Nhu cầu mã hóa thư từ nảy sinh từ thế giới cổ đại và mật mã thay thế đơn giản xuất hiện. Những thông điệp được mã hóa đã quyết định số phận của nhiều trận chiến và ảnh hưởng đến tiến trình lịch sử. Theo thời gian, con người ngày càng phát minh ra nhiều phương pháp mã hóa tiên tiến hơn.

Nhân tiện, mã và mật mã là những khái niệm khác nhau. Đầu tiên có nghĩa là thay thế mọi từ trong tin nhắn bằng một từ mã. Thứ hai là mã hóa từng ký hiệu thông tin bằng một thuật toán cụ thể.

Sau khi toán học bắt đầu mã hóa thông tin và lý thuyết về mật mã được phát triển, các nhà khoa học đã khám phá ra nhiều tính chất hữu ích khoa học ứng dụng này. Ví dụ, thuật toán giải mã đã giúp giải quyết ngôn ngữ chết, chẳng hạn như tiếng Ai Cập cổ đại hoặc tiếng Latin.

Mật mã

Steganography cũ hơn mã hóa và mã hóa. Nghệ thuật này đã xuất hiện từ lâu. Nó có nghĩa đen là “văn bản ẩn” hoặc “văn bản bí mật”. Mặc dù kỹ thuật steganography không tương ứng chính xác với định nghĩa của mật mã hoặc mật mã, nhưng nó nhằm mục đích che giấu thông tin khỏi những con mắt tò mò.

Steganography là mật mã đơn giản nhất. Ví dụ điển hình là những tờ tiền bị nuốt phủ bằng sáp, hoặc một thông điệp trên đầu cạo trọc ẩn dưới lớp lông mọc. Ví dụ rõ ràng nhất về kỹ thuật giấu tin là phương pháp được mô tả trong nhiều cuốn sách trinh thám bằng tiếng Anh (và không chỉ), khi các tin nhắn được truyền qua một tờ báo nơi các chữ cái được đánh dấu kín đáo.

Nhược điểm chính của kỹ thuật giấu tin là một người ngoài cuộc chú ý có thể nhận ra nó. Vì vậy, để ngăn chặn việc đọc tin nhắn bí mật một cách dễ dàng, các phương pháp mã hóa và mã hóa được sử dụng kết hợp với steganography.

Mật mã ROT1 và Caesar

Tên của mật mã này là ROTate 1 chữ cái về phía trước và được nhiều học sinh biết đến. Nó là một mật mã thay thế đơn giản. Bản chất của nó là mỗi chữ cái được mã hóa bằng cách dịch chuyển bảng chữ cái về phía trước 1 chữ cái. A -> B, B -> B, ..., I -> A. Ví dụ: hãy mã hóa cụm từ “Nastya của chúng tôi đang khóc rất to” và nhận được “obshb Obtua dspnlp rmbsheu”.

Mật mã ROT1 có thể được khái quát hóa thành một số độ lệch tùy ý, sau đó nó được gọi là ROTN, trong đó N là số mà mã hóa các chữ cái sẽ được bù. Ở dạng này, mật mã đã được biết đến từ thời cổ đại và được gọi là “mật mã Caesar”.

Mật mã Caesar rất đơn giản và nhanh chóng, nhưng nó là một mật mã đơn giản. hoán vị đơn và do đó dễ dàng bị hack. Có nhược điểm tương tự là nó chỉ thích hợp cho những trò đùa của trẻ em.

Mật mã hoán vị hoặc hoán vị

Những loại mật mã hoán vị đơn giản này nghiêm trọng hơn và đã được sử dụng tích cực cách đây không lâu. Trong Nội chiến Hoa Kỳ và Thế chiến thứ nhất, nó được sử dụng để truyền tải thông điệp. Thuật toán của nó bao gồm sắp xếp lại các chữ cái - viết tin nhắn theo thứ tự ngược lại hoặc sắp xếp lại các chữ cái theo cặp. Ví dụ: hãy mã hóa cụm từ “Mã Morse cũng là mật mã” -> “Akubza ezrom - ezhot rfish”.

Với một thuật toán tốt có thể xác định các hoán vị tùy ý cho từng ký tự hoặc nhóm trong số chúng, mật mã trở nên có khả năng chống lại hack đơn giản. Nhưng! Chỉ trong thời gian thích hợp. Vì mật mã có thể dễ dàng bị bẻ khóa bằng cách sử dụng vũ lực đơn giản hoặc so khớp từ điển nên ngày nay bất kỳ điện thoại thông minh nào cũng có thể giải mã được nó. Vì vậy, với sự ra đời của máy tính, mật mã này cũng trở thành mật mã dành cho trẻ em.

mã Morse

Bảng chữ cái là phương tiện trao đổi thông tin và nhiệm vụ chính của nó là làm cho thông điệp trở nên đơn giản và dễ hiểu hơn khi truyền tải. Mặc dù điều này trái ngược với mục đích mã hóa. Tuy nhiên, nó hoạt động giống như những mật mã đơn giản nhất. Trong hệ thống Morse, mỗi chữ cái, số và dấu chấm câu đều có mã riêng, được tạo thành từ một nhóm dấu gạch ngang và dấu chấm. Khi truyền tin nhắn bằng điện báo, dấu gạch ngang và dấu chấm biểu thị độ dài và tín hiệu ngắn.

Máy điện báo và bảng chữ cái là những thứ đầu tiên được cấp bằng sáng chế cho phát minh “của ông” vào năm 1840, mặc dù các thiết bị tương tự đã được phát minh trước ông ở cả Nga và Anh. Nhưng bây giờ ai quan tâm đến chuyện này nữa... Điện báo và mã Morse đã có một ảnh hưởng rất lớn. ảnh hưởng lớn trên thế giới, cho phép truyền tải thông điệp gần như tức thời qua khoảng cách lục địa.

Thay thế đơn chữ cái

Mã ROTN và Morse được mô tả ở trên là đại diện của phông chữ thay thế dùng một bảng chữ cái. Tiền tố "mono" có nghĩa là trong quá trình mã hóa, mỗi chữ cái của tin nhắn gốc được thay thế bằng một chữ cái hoặc mã khác từ một bảng chữ cái mã hóa duy nhất.

Việc giải mã các mật mã thay thế đơn giản không khó và đây là nhược điểm chính. Chúng có thể được giải quyết bằng cách đơn giản là tìm kiếm hoặc Ví dụ: người ta biết rằng các chữ cái được sử dụng nhiều nhất trong tiếng Nga là “o”, “a”, “i”. Vì vậy, chúng ta có thể giả định rằng trong văn bản mã hóa, các chữ cái xuất hiện thường có nghĩa là “o”, “a” hoặc “i”. Dựa trên những cân nhắc này, tin nhắn có thể được giải mã ngay cả khi không cần tìm kiếm trên máy tính.

Mary I, Nữ hoàng Scotland từ năm 1561 đến 1567, được biết là đã sử dụng mật mã thay thế dùng một bảng chữ cái rất phức tạp với nhiều tổ hợp. Tuy nhiên, kẻ thù của cô đã có thể giải mã được các tin nhắn và thông tin đó đủ để kết án tử hình nữ hoàng.

Mật mã Gronsfeld hoặc phép thay thế nhiều bảng chữ cái

Mật mã đơn giản được coi là vô dụng bởi mật mã. Vì vậy, nhiều trong số chúng đã được sửa đổi. Mật mã Gronsfeld là một bản sửa đổi của mật mã Caesar. Phương pháp này có khả năng chống hack cao hơn nhiều và bao gồm thực tế là mỗi ký tự của thông tin được mã hóa được mã hóa bằng một trong các bảng chữ cái khác nhau, được lặp lại theo chu kỳ. Có thể nói đây là ứng dụng đa chiều của mật mã thay thế đơn giản nhất. Trên thực tế, mật mã Gronsfeld rất giống với mật mã được thảo luận dưới đây.

Thuật toán mã hóa ADFGX

Đây là mật mã nổi tiếng nhất trong Thế chiến thứ nhất được người Đức sử dụng. Mật mã có tên như vậy vì nó quy giản tất cả các mật mã thành việc xen kẽ các chữ cái này. Bản thân việc lựa chọn các chữ cái được xác định bởi sự thuận tiện của chúng khi được truyền qua đường dây điện báo. Mỗi chữ cái trong mật mã được biểu thị bằng hai. Hãy xem xét thêm phiên bản thú vị ADFGX vuông, bao gồm các số và được gọi là ADFGVX.

MỘT D F G V. X
MỘT J Q MỘT 5 H D
D 2 E R V. 9 Z
F 8 Y TÔI N K V.
G bạn P B F 6
V. 4 G X S 3 T
X W L Q 7 C 0

Thuật toán tạo hình vuông ADFGX như sau:

  1. Chúng tôi lấy n chữ cái ngẫu nhiên để biểu thị các cột và hàng.
  2. Chúng tôi xây dựng một ma trận N x N.
  3. Chúng ta nhập bảng chữ cái, số, ký hiệu vào ma trận, ngẫu nhiên rải rác khắp các tế bào.

Hãy tạo một hình vuông tương tự cho tiếng Nga. Ví dụ: hãy tạo hình vuông ABCD:

MỘT B TRONG G D
MỘT CÔ ẤY N b/b MỘT Tôi/Y
B H V/F H/C Z D
TRONG Sh/Sch B L X TÔI
G R M VỀ YU P
D T C Y bạn

Ma trận này trông có vẻ lạ vì một số ô chứa hai chữ cái. Điều này có thể chấp nhận được; ý nghĩa của thông điệp không bị mất đi. Nó có thể được khôi phục dễ dàng. Hãy mã hóa cụm từ “Mật mã nhỏ gọn” bằng bảng này:

1 2 3 4 5 6 7 8 9 10 11 12 13 14
cụm từ ĐẾN VỀ M P MỘT ĐẾN T N Y Y Sh F R
mật mã bv lính gác GB gd Ah bv db bụng dg địa ngục va địa ngục bb ha

Do đó, tin nhắn được mã hóa cuối cùng trông như thế này: “bvgvgbgdagbvdbabdgvdvaadbbga”. Tất nhiên, người Đức đã thực hiện một đường lối tương tự thông qua một số mật mã khác. Và kết quả là một tin nhắn được mã hóa có khả năng chống hack rất cao.

Mật mã Vigenère

Mật mã này có khả năng chống bẻ khóa cao hơn so với mật mã dùng một bảng chữ cái, mặc dù nó là một mật mã thay thế văn bản đơn giản. Tuy nhiên, nhờ thuật toán mạnh mẽ nên nó được coi là không thể hack trong thời gian dài. Những đề cập đầu tiên của nó có từ thế kỷ 16. Vigenère (một nhà ngoại giao người Pháp) bị nhầm lẫn là người phát minh ra nó. Để hiểu rõ hơn những gì Chúng ta đang nói về, hãy xem xét bảng Vigenère (hình vuông Vigenère, tabula orta) cho tiếng Nga.

Hãy bắt đầu mã hóa cụm từ “Kasperovich cười”. Nhưng để mã hóa thành công, bạn cần có từ khóa - hãy đặt nó là “mật khẩu”. Bây giờ hãy bắt đầu mã hóa. Để làm điều này, chúng tôi viết ra khóa nhiều lần đến mức số lượng ký tự trong đó tương ứng với số ký tự trong cụm từ được mã hóa, bằng cách lặp lại khóa hoặc cắt nó đi:

Bây giờ, bằng cách sử dụng mặt phẳng tọa độ, chúng ta tìm kiếm một ô là giao điểm của các cặp chữ cái và chúng ta nhận được: K + P = b, A + A = B, C + P = B, v.v.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
Mật mã: Kommersant B TRONG YU VỚI N YU G SCH E Y X G MỘT L

Chúng tôi hiểu rằng “Kasperovich cười” = “abvyusnyugshch eykhzhgal.”

Việc giải mã Vigenère rất khó vì phân tích tần số đòi hỏi phải biết độ dài từ khóa. Do đó, việc hack liên quan đến việc đưa ngẫu nhiên độ dài của một từ khóa và cố gắng bẻ khóa thông điệp bí mật.

Cũng cần đề cập rằng ngoài một khóa hoàn toàn ngẫu nhiên, có thể sử dụng một bảng Vigenère hoàn toàn khác. TRONG trong trường hợp này Quảng trường Vigenère bao gồm bảng chữ cái tiếng Nga được viết từng dòng với độ lệch là một. Điều này đưa chúng ta đến mật mã ROT1. Và cũng giống như trong mật mã Caesar, phần bù có thể là bất cứ thứ gì. Hơn nữa, thứ tự của các chữ cái không nhất thiết phải theo thứ tự bảng chữ cái. Trong trường hợp này, bản thân bảng có thể là một khóa mà không biết khóa nào thì sẽ không thể đọc được tin nhắn dù biết khóa đó.

Mã thực bao gồm các kết quả khớp cho mỗi từ mã riêng. Để làm việc với chúng, bạn cần có cái gọi là sách mã. Trên thực tế, đây là cùng một từ điển, chỉ chứa các bản dịch từ thành mã. Một ví dụ điển hình và đơn giản về mã là bảng ASCII- mật mã quốc tế của các ký tự đơn giản.

Ưu điểm chính của mật mã là chúng rất khó giải mã. Phân tích tần số gần như không có tác dụng khi hack chúng. Trên thực tế, điểm yếu của các mã nằm ở chính những cuốn sách. Thứ nhất, việc chuẩn bị của họ là một quá trình phức tạp và tốn kém. Thứ hai, đối với kẻ thù, chúng biến thành đối tượng mong muốn và việc chặn ngay cả một phần của cuốn sách buộc chúng phải thay đổi hoàn toàn tất cả các mã.

Vào thế kỷ 20, nhiều bang đã sử dụng mật mã để truyền dữ liệu bí mật, thay đổi sổ mã theo thời gian. Thời kỳ nhất định. Và họ tích cực săn lùng sách của hàng xóm và đối thủ.

"Bí ẩn"

Mọi người đều biết rằng Enigma là chính máy mã hóaĐức quốc xã trong Thế chiến thứ hai. Cấu trúc Enigma bao gồm sự kết hợp của các mạch điện và cơ khí. Mật mã diễn ra như thế nào tùy thuộc vào cấu hình ban đầu của Enigma. Đồng thời, Enigma tự động thay đổi cấu hình trong quá trình hoạt động, mã hóa một tin nhắn theo nhiều cách trong toàn bộ chiều dài của nó.

Ngược lại với hầu hết mật mã đơn giản Enigma cung cấp hàng nghìn tỷ kết hợp có thể xảy ra, khiến việc phá vỡ thông tin được mã hóa gần như không thể. Đổi lại, Đức Quốc xã đã chuẩn bị sẵn một tổ hợp cụ thể cho mỗi ngày và sử dụng tổ hợp này vào một ngày cụ thể để truyền tải thông điệp. Vì vậy, ngay cả khi Enigma rơi vào tay kẻ thù, nó cũng không góp phần giải mã tin nhắn nếu không nhập cấu hình cần thiết hàng ngày.

Họ tích cực tìm cách giải mã Enigma trong suốt chiến dịch quân sự của Hitler. Ở Anh vào năm 1936, một trong những thiết bị điện toán đầu tiên (máy Turing) đã được chế tạo cho mục đích này, nó trở thành nguyên mẫu của máy tính trong tương lai. Nhiệm vụ của anh là mô phỏng hoạt động của hàng chục Enigma cùng lúc và chạy các thông điệp bị chặn của Đức Quốc xã thông qua chúng. Nhưng ngay cả máy Turing đôi khi cũng chỉ có thể bẻ khóa được một tin nhắn.

Mã hóa khóa công khai

Thuật toán mã hóa phổ biến nhất, được sử dụng ở mọi nơi trong công nghệ và hệ thống máy tính. Bản chất của nó, như một quy luật, nằm ở sự hiện diện của hai khóa, một trong số đó được truyền công khai và khóa thứ hai là bí mật (riêng tư). Khóa chung được sử dụng để mã hóa tin nhắn và khóa bí mật được sử dụng để giải mã nó.

Vai trò của khóa công khai thường là một số rất lớn, chỉ có hai ước số, không tính một và chính số đó. Cùng với nhau, hai ước số này tạo thành khóa bí mật.

Hãy xem xét một ví dụ đơn giản. Giả sử khóa chung là 905. Các ước của nó là các số 1, 5, 181 và 905. Khi đó khóa bí mật sẽ là số 5*181. Bạn có nói nó quá đơn giản không? Nếu số công khai là một số có 60 chữ số thì sao? Về mặt toán học, việc tính toán các ước số của một số lớn là rất khó khăn.

Để có một ví dụ thực tế hơn, hãy tưởng tượng bạn đang rút tiền từ máy ATM. Khi thẻ được đọc, dữ liệu cá nhân sẽ được mã hóa bằng một khóa chung nhất định và về phía ngân hàng, thông tin sẽ được giải mã bằng khóa bí mật. Và khóa công khai này có thể được thay đổi cho mỗi thao tác. Nhưng không có cách nào để nhanh chóng tìm ra các bộ chia khóa khi chặn nó.

Độ bền phông chữ

Sức mạnh mật mã của thuật toán mã hóa là khả năng chống hack. Thông số này là điều quan trọng nhất đối với bất kỳ mã hóa nào. Rõ ràng là một mật mã thay thế đơn giản mà bất cứ ai cũng có thể giải mã được thiết bị điện tử, là một trong những nơi không ổn định nhất.

Ngày nay không tồn tại tiêu chuẩn chung, qua đó có thể đánh giá độ mạnh của mật mã. Việc này tốn nhiều công sức và quá trình dài. Tuy nhiên, có một số ủy ban đã đưa ra các tiêu chuẩn trong lĩnh vực này. Ví dụ, Yêu cầu tối thiểuđến thuật toán Mã hóa nâng cao Tiêu chuẩn mã hóa hoặc AES, được phát triển bởi NIST USA.

Để tham khảo: mật mã Vernam được công nhận là mật mã có khả năng chống bẻ khóa cao nhất. Đồng thời, ưu điểm của nó là theo thuật toán của nó, đây là mật mã đơn giản nhất.