nếu bạn có nhiều thẻ ngân hàng, mã hóa nhập cửa hoặc mật khẩu số nhỏ khác để nhớ, cuối cùng nó sẽ trở thành rắc rối. Điều tồi tệ nhất, đối với tôi, là một thẻ ngân hàng cho một tài khoản kinh doanh mà tôi sử dụng một lần trong một mặt trăng xanh. Tôi có lẽ đã sử dụng nó tám lần trong năm năm, và sau đó họ đã cho tôi một thẻ mới với một pin mới. Thở dài.
Nhanh chóng, pin của tôi là gì?
Làm thế nào một người bình thường đối phó với sự phổ biến của các chân? Họ sẽ viết những con số trên một tờ giấy và giữ nó trong ví của họ. Tất cả chúng ta đều biết kết thúc đó, phải không? Một ví bị mất và nhiều tài khoản ngân hàng trống. Làm thế nào một hacker xử lý nó? Viết từng số xuống trên chính thẻ, nhưng được mã hóa, tự nhiên, với sơ đồ mã hóa duy nhất không thể phá vỡ có ngoài đó: Pad một lần (OTP).
OTP là một con vịt kỳ lạ trong số các phương thức mã hóa. Chúng có nghĩa là được giải mã trong đầu của bạn, nhưng miễn là khóa bí mật vẫn an toàn, chúng là đá rắn. Nếu bạn đã từng thử mã hóa mã S-BOX và tất cả các hộp bổ sung, dịch chuyển và trộn sẽ xảy ra với một phương thức mã hóa bình thường, OTPS sẽ được làm mới đơn giản. Sự đánh đổi là một phím “dài”, nhưng một OTP hoàn toàn hoàn hảo để mã hóa chân của bạn.
Phần đầu tiên của bài viết này dường như là “sự thân thiện” hack-hack “mà bạn sẽ ở nơi khác, nhưng đừng tuyệt vọng, đó cũng là một giới thiệu cửa sau về OTP. Hiệp thứ hai lặn xuống pad một lần với một số trực giác tiền điện tử sâu, một số toán thân thiện và hy vọng một cuộc tranh luận thuyết phục rằng việc viết những chân được mã hóa của bạn là điều đúng đắn. Trên đường đi, tôi liệt kê ba điều bạn có thể làm sai khi thực hiện OTP. (Và không ai trong số họ sẽ gây sốc cho bạn!) Nhưng cuối cùng, giải pháp mã hóa pin của tôi sẽ phá vỡ một trong ba và vẫn là âm thanh. Tò mò chưa? Đọc trên.
Giải pháp PIN
Vì vậy, đầu tiên giải pháp cho vấn đề thẻ ngân hàng: Viết mã PIN của bạn được mã hóa với một bí mật mà chỉ bạn biết. Thay vì cần nhớ một số có bốn chữ số cho mỗi thẻ mới, bạn sẽ chỉ cần một số bốn chữ số mãi mãi. Điều quan trọng là chọn một sơ đồ mã hóa đủ dễ dàng để hoàn tác để bạn không nhìn quá lạ khi được yêu cầu nhập mã PIN tại cửa sổ của ngân hàng. Đây là việc sử dụng OTP cổ điển – một mã hóa mà bạn có thể hoàn tác trong đầu.
Đầu tiên, chọn ngẫu nhiên một số bốn chữ số bí mật. Sau đó, trừ số đó từ mã PIN của bạn và viết kết quả trên thẻ của bạn. Để có được mã PIN của bạn, khi đứng trước nhà giao dịch ngân hàng, chỉ cần nhìn xuống thẻ và thêm số bí mật. Teller sẽ nghĩ rằng bạn đã viết mã PIN của bạn trên thẻ. Hãy cảm thấy tự do để tự mãn, bởi vì bạn đã sử dụng một sơ đồ mã hóa không thể phá vỡ.
Thay vì bổ sung và phép trừ bình thường, với việc mang và mượn trên các chữ số, bạn sẽ muốn sử dụng toán Modulo-10 – thêm hoặc trừ mười từ kết quả bất cứ lúc nào nó nằm ngoài phạm vi 0-9. Chúng ta sẽ nói về lý do tại sao dưới đây, nhưng bây giờ, đây là một ví dụ hoạt động.
Giả sử pin là 1234 – nó phải xảy ra vậy ai đó, phải không? – Và số bí mật ngẫu nhiên của tôi là 1337, tự nhiên. Hãy mã hóa. Trừ 1 từ 1 cho số không, vì vậy tôi viết nó xuống. Trừ 3 từ 2 cho -1, đó là nơi mà số học Modulo-10 đến. Trong trường hợp này, -1 biến thành 9 bằng cách thêm mười. 3 – 3 = 0 và 4 – 7 = 7, MOD-10. Thẻ của tôi bây giờ có 0907 được viết trên đó.
Bây giờ hãy giải mã. Nhìn xuống thẻ, tôi thấy một 0 và thêm 1. 9 + 3 = 12, vì vậy chúng ta sẽ cần phải trừ đi mười để có được 2. (đó là lý do để chọn bổ sung cho giai đoạn giải mã, nó dễ dàng chỉ là thả bất kỳ 1s hàng đầu.) 0 + 3 = 3 và 7 + 7 = 14 -> 4 <. Tôi gõ vào 1234, và tiền là của tôi! Khi bạn gặp sự cố thêm số bí mật của mình vào bất kỳ số nào khác, Digit-Wise Mod-10, bạn sẽ ngạc nhiên khi nào nó sẽ hoạt động nhanh như thế nào. Hãy thử nó và xem nếu bạn có được tốt trong vòng mười phút. Miếng đệm một lần Một miếng đệm một lần là cả sơ đồ mã hóa đối xứng đơn giản nhất và cũng hoàn toàn không thể phá vỡ. Nó có ba đặc điểm quan trọng, hai trong số đó đã được chứng minh ở trên, và có bất kỳ bất kỳ trong số họ sai có thể là thảm họa. Tính năng quan trọng nhất của OTP là mật khẩu cần phải ngẫu nhiên và cùng độ dài với văn bản mà nó mã hóa - do đó bí mật gồm bốn chữ số cho mã PIN. Trong OTP, mọi thứ xoay quanh bí mật, đó cũng là gót chân của nó. Đối với một số có bốn chữ số, giữ bí mật gồm bốn chữ số là không có vấn đề. Nhưng hãy tưởng tượng rằng bạn muốn gửi gigabyte của những bức ảnh được mã hóa của kỳ nghỉ của bạn cho một người bạn. Đó là rất nhiều tài liệu chính để giữ trong tay và bí mật. Bản gốc của [matt_crypto], công khai domainsecond, phương pháp kết hợp thông điệp với bí mật phải tương tự như số học modulo, trong đó tập hợp các ký tự được mã hóa và tập hợp các ký tự văn sẵn - mã PIN trong ví dụ của chúng tôi - phải lập bản đồ một đối một. MOD-10 đảm bảo điều này một cách dễ dàng: cả hai đều nằm trong phạm vi 0-9. Có thể bạn quen thuộc với việc sử dụng nhà điều hành XOR trên dữ liệu nhị phân, điều tương tự như một trong hai người bổ sungBẬT hoặc TIỆN ÍCH, MOD-2. (0 + 0 = 0, 0 + 1 = 1, 1 + 0 = 1 và 1 + 1 = 2 -> 0. QED.) Bạn cũng có thể sử dụng các chữ cái và bọc bảng chữ cái xung quanh tại “Z” như mật mã Caesar hoặc ROT13, chỉ cách ánh xạ bảng chữ cái thành số và thực hiện MOD-26.
Thứ ba, và có lẽ đây là một hệ quả của lần đầu tiên, bạn không nên sử dụng lại bí mật trong một miếng đệm một lần. Bạn sẽ nghĩ rằng điều này là hiển nhiên, vì nó ngay cả trong tên của phương thức mã hóa, nhưng thật khó để thực hiện trong thực tế. Và trên thực tế, sơ đồ mã hóa mã PIN của tôi phá vỡ quy tắc này bằng cách sử dụng cùng một bí mật trên nhiều khóa. Chúng ta sẽ sớm vào đó.
Làm rối tung mã hóa hoàn hảo
Tại sao một OTP không thể phá vỡ? Phá vỡ hầu hết các lược đồ mã hóa thường sôi sục với xác suất và thống kê. Chẳng hạn, nếu bạn mã hóa một văn bản với mật mã Caesar ở trên, mỗi chữ cái trong bản rõ được ánh xạ tới một chữ cái khác mỗi khi nó xảy ra trong bản mã. Nếu bạn biết rằng văn bản gốc bằng tiếng Anh, trong đó chữ cái được sử dụng phổ biến nhất là “e”, đó là một cách tốt nếu “q” là chữ cái phổ biến nhất trong bản mã, nó là viết tắt của “e”. Đó là, chúng ta tìm thấy những điểm tương đồng thống kê giữa bản rõ và bản mã, và sử dụng chúng để tạo cầu nối giữa hai người.
Sử dụng một khóa bí mật miễn là bản rõ và được chọn ngẫu nhiên, phá vỡ bất kỳ mối quan hệ thống kê nào với bản mã. Cho một bản mã cụ thể được viết xuống thẻ của tôi, mỗi mã PIN từ 0000 đến 9999 là có thể và nếu phím được chọn ngẫu nhiên, có khả năng như nhau. Không có thông tin về bản rõ trong bản mã – đó thực chất là bằng chứng của Claude Shannon (PDF hoàn toàn cổ điển) một cách ngắn gọn. Và đó là lý do tại sao một OTP không thể phá vỡ.
Diana một lần [US NSA], công khai Domainehis thực sự là chìa khóa để hiểu lĩnh vực mật mã: đó là một nỗ lực để tranh giành thông tin về bản rõ trong quá trình mã hóa để mặc dù chìa khóa ngắn hơn được sử dụng, không dấu vết có liên quan thống kê của bản rõ vẫn còn. Mong muốn của các phím ngắn này không chỉ là vấn đề thuận tiện: Hãy tưởng tượng rằng bạn và Hackaday đã phải trao đổi trước đây 500 Kib dữ liệu ngẫu nhiên để tải xuống bài viết này và đọc nó. Hãy tưởng tượng độ dài của mật khẩu WiFi mà bạn phải viết cho khách! Đây là ý nghĩa trong đó OTP là tầm thường và không thú vị – nó có thể không thể phá vỡ, nhưng những bí mật quá dài đối với hầu hết các ứng dụng. Crypto thực sự là về việc tìm kiếm các thuật toán phá vỡ mối quan hệ thống kê với mức tối thiểu của vật liệu chính.
Với ý nghĩ đó, bạn có thể làm hỏng việc triển khai OTP bằng cách sử dụng mật khẩu ngắn hoặc không ngẫu nhiên. Hãy tưởng tượng sử dụng 1 làm mật khẩu của bạn và lặp lại nó khi cần thiết; Bản mã của chúng tôi sẽ đọc 2345 và mã PIN sẽ được đoán vào lần thử thứ hai. Bạn cũng muốn sử dụng mật khẩu ngẫu nhiên; Chọn 0000 vì nó làm cho toán học dễ dàng là điều duy nhất tồi tệ hơn so với ở trên. (Mặc dù, nói đúng, tôi sẽ cuộn lại nếu tôi có 0000, 1111, 9999, 1234, 4321 hoặc tương tự.) Dù sao, đừng sử dụng sinh nhật của bạn. Số điện thoại cũ của những người bạn thời thơ ấu có thể được chấp nhận.
Vai trò của modulo số học là tinh tế hơn một chút. Bất kỳ chức năng nào được sử dụng, tập hợp các ký tự có thể trong bản rõ phải ánh xạ một-một với bản mã. Tại sao? Hãy tưởng tượng rằng bạn đã sử dụng bổ sung đơn giản thay vì bổ sung MOD-10. Để có được chữ số cuối cùng của bản mã PIN của chúng tôi, chúng tôi đã sử dụng 4 – 7 = -3 -> 7 và được giải mã với 7 + 7 = 14 -> 4. Nếu chúng tôi viết xuống -3 thay vào đó, kẻ tấn công sẽ biết rằng chữ số cuối cùng của chúng ta không thể ‘T lớn hơn 6 vì thêm 9, giá trị tối đa, chỉ cung cấp 6. Chúng tôi đã rò rỉ thông tin bằng cách có một bộ lớn hơn trong bản mã so với trong bản rõ.
Và điều đó để lại cách cuối cùng để gây rối: sử dụng lại pad “một lần”. Rõ ràng, phải không? Sai.
Máy lorenz, tên miền công cộng
Một mặt, tái sử dụng là một trách nhiệm xác định. Sử dụng lại mật khẩu trong một sơ đồ mã hóa rất giống nhau đã phá vỡ “Tunny”, một mã quan trọng trong WWII. Một tin nhắn được mã hóa 4.000 ký tự đã được gửi nhưng không nhận được chính xác. Người gửi đã gửi lại tin nhắn, với cùng một bí mật nhưng được thực hiện các thay đổi nhỏ trong văn bản, sử dụng các chữ viết tắt khác nhau, v.v. Điều này đã cho các đồng minh đủ để phá vỡ kỹ sư tunny và đảo ngược, máy mã hóa nó. trò chơi kết thúc.
Đây là toán học làm cho công việc giải mã Tunny, và nên thuyết phục bạn gần như không bao giờ sử dụng lại một chìa khóa. Nếu chúng ta mã hóa các tin nhắn A và B với khóa bí mật C và ai đó tình cờ nghe thấy cả hai, chúng chỉ có thể mod chúng lại với nhau để lấy (một mod c) mod (b mod c) = (mod b) mod c mod c = a Mod B, nơi Mod là nhà điều hành mô-đun bitulo bitwise hoặc số mà chúng ta đã từng sử dụng. Kể từ khi dùng modulo nhị phân là sự đảo ngược của riêng nó, kết quả là một thứ có liên quan đến cả bản rõ ràng và độc lập với khóa bí mật.
Từ đây, so sánh các dự đoán thông minh cho A và B và so sánh chúng với kết quả MOD B có thể phá vỡ mã. Vì vậy, nếu bạn khá chắc chắn rằng “Attack” xuất hiện trong cả hai văn bản (loại tiền điện tử luôn mã hóa “Tấn công vào Dawn”),Sau đó, bạn có thể thử modding “tấn công” cùng nhau ở các vị trí khác nhau cho đến khi bạn có một trận đấu với mod B.
Một kết thúc bất ngờ
Nhưng đây là Twist cuối cùng! Chúng ta có thể thoát khỏi việc tái sử dụng khóa bí mật trên tất cả các thẻ ngân hàng của chúng tôi, thậm chí mặc dù toán học trên. Tại sao? Bởi vì chính các chân là ngẫu nhiên. Trái ngược với các thông điệp ngôn ngữ tự nhiên được gửi trong thời chiến, MOD B cũng ngẫu nhiên như mod c nếu cả A và B đều là ghim ngẫu nhiên.
Vì vậy, đây là cách một hacker nhớ ghim: bằng cách học hỏi rất nhiều về pad một lần, làm thế nào để phá vỡ nó, và dù sao nó rất hữu ích nếu thông điệp cần thiết để bảo vệ là ngắn. Và làm thế nào, đối với các tin nhắn cụ thể, bạn thậm chí có thể phá vỡ các quy tắc.