Là giao tiếp mã hóa XOR đơn giản này tuyệt đối an toàn?


23

Nói Alice và Peter mỗi người có một thẻ nhớ flash USB 4GB. Họ gặp nhau và lưu trên cả hai gậy có tên alice_to_peter.key(2GB) và peter_to_alice.key(2GB) chứa các bit được tạo ngẫu nhiên. Họ không bao giờ gặp lại, nhưng giao tiếp điện tử. Alice cũng duy trì một biến được gọi alice_pointervà Peter duy trì biến được gọi peter_pointer, cả hai biến ban đầu được đặt thành không.

Khi Alice cần gửi tin nhắn cho Peter, cô ấy sẽ làm (nơi nlà byte thứ n của tin nhắn):

encrypted_message_to_peter[n] = message_to_peter[n] XOR alice_to_peter.key[alice_pointer + n]
encrypted_payload_to_peter = alice_pointer + encrypted_message_to_peter
alice_pointer += length(encrypted_message_to_peter)

(và để bảo mật tối đa, phần được sử dụng của khóa có thể bị xóa)

Peter nhận encrypted_payload_to_peter, đọc alice_pointerđược lưu trữ ở đầu tin nhắn và không:

message_to_peter[n] = encrypted_message_to_peter[n] XOR alice_to_peter.key[alice_pointer + n]

Và để bảo mật tối đa, sau khi đọc tin nhắn cũng xóa phần đã sử dụng của khóa. - EDIT: Trên thực tế bước này với thuật toán đơn giản này (không có kiểm tra và xác thực tính toàn vẹn) làm giảm tính bảo mật, xem bài đăng Palo Ebermann dưới đây.

Khi Peter cần gửi tin nhắn cho Alice, họ làm ngược lại, lần này là peter_to_alice.keypeter_pointer.

Với lược đồ tầm thường này, họ có thể gửi mỗi ngày trong 50 năm tới 2GB / (50 * 365) = ~ 115kB dữ liệu được mã hóa theo cả hai hướng. Nếu họ cần thêm dữ liệu để gửi, họ có thể sử dụng các khóa lớn hơn, ví dụ với HD 2TB ngày nay (khóa 1TB), có thể đổi 60MB / ngày trong 50 năm tới! Đó là rất nhiều dữ liệu trong thực tế; ví dụ, bằng cách sử dụng nén, nó mất hơn một giờ để liên lạc bằng giọng nói chất lượng cao.

Đối với tôi, dường như không có cách nào để kẻ tấn công đọc các tin nhắn được mã hóa mà không có chìa khóa, bởi vì ngay cả khi chúng có một máy tính cực kỳ nhanh, với lực lượng vũ phu, chúng có thể nhận được mọi tin nhắn có thể dưới giới hạn, nhưng đây là một con số thiên văn tin nhắn và kẻ tấn công không biết tin nhắn nào trong số chúng là tin nhắn thực sự.

Tôi có đúng không Là chương trình truyền thông này thực sự an toàn tuyệt đối? Và nếu nó an toàn, nó có tên riêng không? Mã hóa XOR nổi tiếng, nhưng tôi đang tìm tên của ứng dụng thực tế cụ thể này bằng các phím lớn ở cả hai bên? Tôi khiêm tốn mong đợi rằng ứng dụng này đã được phát minh ra trước mặt tôi. :-)

Lưu ý: Nếu nó hoàn toàn an toàn thì thật tuyệt vời, vì với các thiết bị lưu trữ lớn giá rẻ ngày nay, việc truyền thông an toàn sẽ rẻ hơn nhiều so với mật mã lượng tử đắt tiền và điều này có bảo mật tương đương!

EDIT: Tôi nghĩ rằng điều này sẽ thực tế hơn trong tương lai khi chi phí lưu trữ giảm.Nó có thể giải quyết giao tiếp an toàn mãi mãi.Ngày nay, bạn không có gì chắc chắn nếu ai đó tấn công thành công các mật mã hiện tại ngay cả một năm sau đó và khiến việc triển khai thường tốn kém của nó không an toàn. Trong nhiều trường hợp trước khi giao tiếp xảy ra, khi cả hai bên gặp nhau, đó là lúc tạo ra các phím. Tôi nghĩ rằng nó hoàn hảo cho giao tiếp quân sự, ví dụ giữa các tàu ngầm có thể có HD với các phím lớn và trung tâm quân sự có thể có HD cho mỗi tàu ngầm. Nó cũng có thể thiết thực trong cuộc sống hàng ngày, ví dụ như để kiểm soát tài khoản ngân hàng của bạn, bởi vì khi bạn tạo tài khoản, bạn sẽ gặp ngân hàng, v.v.


4
Khác với sơ đồ cụ thể để phối hợp phần nào của khóa sẽ sử dụng, đây chỉ là phần đệm một lần . Nhưng dưới sự kiểm tra chặt chẽ hơn, hóa ra nó không thực sự hữu ích cho 99% trường hợp sử dụng.

10
Vì câu hỏi này là về sức mạnh của một thuật toán tiền điện tử cụ thể, nó có thể phù hợp hơn với crypto.stackexchange.com . Để chuyển câu hỏi của bạn đến đó, bạn có thể gắn cờ cho sự chú ý của người điều hành và yêu cầu di chuyển.
Bart van Ingen Schenau

12
OTP được phát minh ra cách đây hơn một thế kỷ và được sử dụng như những tờ giấy vật lý thực tế trong cả hai cuộc Chiến tranh Thế giới. ( en.wikipedia.org/wiki/One-time_pad ) Vấn đề về mật mã học bây giờ là trao đổi khóa.
Gort Robot

6
Lưu ý rằng điều này vẫn khiến bạn giải quyết vấn đề tạo đủ các khóa duy nhất cho tất cả dữ liệu dự kiến ​​cho đến khi hai bên gặp lại nhau và các khóa phải được tạo thông qua quy trình ngẫu nhiên CHÍNH XÁC - các trình tạo số giả ngẫu nhiên dễ bị phân tích, ngày càng nhiều khi nhiều mẫu sử dụng cùng PRNG trở nên khả dụng.
keshlam

1
@keshlam. Tạo ra các số lượng tử ngẫu nhiên thực sự đang trở nên rất rẻ. Bài viết thú vị tại arxiv: Tạo số ngẫu nhiên lượng tử trên điện thoại di động: arxiv.org/abs/1405.0435
user3123061

Câu trả lời:


50

Vâng, đây là một miếng đệm một lần . Nếu vật liệu chính không bao giờ được sử dụng lại, nó an toàn về mặt lý thuyết.

Nhược điểm là bạn sẽ cần một khóa cho mỗi cặp hiệu trưởng giao tiếp và bạn sẽ cần một cách an toàn để trao đổi tài liệu chính trước khi giao tiếp.


52
Tôi nghĩ rằng đáng để nhấn mạnh rằng "an toàn về mặt lý thuyết" có nghĩa là nó được chứng minh về mặt toán học là không thể phá vỡ , với điều kiện là các khóa thực sự ngẫu nhiên và không được sử dụng lại. Đó là khá nhiều đảm bảo mạnh mẽ nhất mà bạn có thể nhận được ở bất cứ đâu trong mật mã.
Michael Borgwardt

1
@MichaelBorgwardt điểm rất lớn đấy. Trong trường hợp này "an toàn về mặt lý thuyết" thực sự tốt hơn "an toàn thực tế".
Đánh dấu

2
trường hợp cụ thể: tôi đã có một khóa ngẫu nhiên 2 GB, có 16 byte liên tiếp bằng 0.
Michael

@Michael Cơ hội xảy ra là khoảng 1 trên 10 ^ 27.
này

1
@Floris "phép tính" của tôi: Một byte có 256 giá trị có thể. Đó là một trong 256 mà tất cả sẽ bằng không. 256 ^ 16 để có cơ hội cho 16 byte. Và sau đó chia số byte trong 2GB cho cơ hội đó. Tôi nghĩ rằng tôi đã bỏ lỡ một phép chia cho 16, dù sao ở đây (1024 * 1024 * 1024 * 1024 * 2 * (1/16)) / (256 ^ 16) Điểm cuối cùng của bạn làm cho phép tính này không liên quan.
này

32

Như câu trả lời của Vatine chỉ ra, thuật toán của bạn về cơ bản là một lần.

Tuy nhiên, để nhận xét về một trong những ghi chú của bạn:

Lưu ý: Nếu nó hoàn toàn an toàn thì thật tuyệt vời vì với những bộ nhớ lớn chi phí thấp ngày nay, đó là cách thức giao tiếp an toàn hơn nhiều so với mật mã lượng tử đắt tiền và với bảo mật tương đương!

Phản ứng của tôi là không, nó không tuyệt vời. Ma quỷ luôn ở trong các chi tiết, và ma quỷ ở đây là trong việc trao đổi chìa khóa. Phương pháp của bạn phụ thuộc vào trao đổi khóa hoàn hảo, trực diện. Tôi không đủ khả năng gửi James Bond mang theo đĩa flash 4GB cho tôi đến mọi thương gia trên internet mỗi khi tôi muốn mua thứ gì đó hoặc có các kết nối an toàn khác.

Và cuối cùng, khía cạnh XOR của thuật toán của bạn không quan trọng. Một mật mã thay thế đơn giản là tốt với OTP. Điểm mạnh của OTP là khóa không bao giờ được sử dụng lại và giả định James Bond đang trao đổi hoàn hảo các khóa cho cả hai bên (tức là trao đổi khóa an toàn trước đó)


13
Một điều khác về một OTP là khóa này (ít nhất) miễn là thông điệp cần mã hóa và cần một nguồn số ngẫu nhiên chất lượng rất cao.
Donal Fellows

Nhiều thuật toán mã hóa hoạt động bằng cách nào đó chuyển đổi một khóa thành một luồng dữ liệu không thể phân biệt được với dữ liệu ngẫu nhiên, sau đó sử dụng dữ liệu đó làm dữ liệu một lần. Từ quan điểm của kẻ tấn công, không có sự khác biệt giữa dữ liệu thực sự ngẫu nhiên và dữ liệu không thể phân biệt với dữ liệu ngẫu nhiên (theo định nghĩa; nếu bạn tìm thấy một sự khác biệt, thì không thể phân biệt được), vì vậy về mặt lý thuyết, điều này cũng an toàn như OTP . Tất nhiên, khi chúng ta nói dữ liệu không thể phân biệt được với dữ liệu ngẫu nhiên thực sự, thường có một loạt các cảnh báo. Giải thích này tất nhiên là một sự đơn giản hóa quá mức.
Brian

21

Mặc dù pad một lần có bảo đảm quyền riêng tư vô điều kiện (đã được chứng minh về mặt toán học) đối với kẻ tấn công chỉ có thể đọc tin nhắn, nhưng nó có một số điểm yếu.

  • Kẻ tấn công chặn người đoán chính xác văn bản đơn giản có thể điều khiển bản mã theo bất cứ thứ gì cô ta muốn (với cùng độ dài).

  • Nếu kẻ tấn công chèn hoặc xóa một số tin nhắn (hoặc một phần trong đó), con trỏ của Alice và Bob sẽ không đồng bộ và mọi liên lạc trong tương lai đều bị phá vỡ.

    Cập nhật: Điều này giả định rằng cả hai bên theo dõi cả hai con trỏ. Nếu bạn gửi giá trị con trỏ hiện tại, bạn dễ bị tấn công hai lần (nếu bạn cho phép cùng một phạm vi khóa được sử dụng nhiều lần) hoặc tấn công DOS (nếu bạn không cho phép cùng một phạm vi khóa được sử dụng nhiều lần, ví dụ bằng cách xóa chúng).

Cả hai vấn đề này đều do thiếu tính toàn vẹn và bảo vệ xác thực - bạn có một mật mã hoàn hảo, nhưng không có MAC.

Thêm MAC vào giao thức một lần của bạn để làm cho nó thực sự an toàn. Mỗi tin nhắn sẽ nhận được một "tổng kiểm tra" đảm bảo rằng nó thực sự được gửi bởi người gửi được cho là và không bị sửa đổi ở giữa. Ngoài ra, bạn nên gửi một số số thứ tự để người nhận biết phần nào của khóa sẽ sử dụng khi tin nhắn trước đó bị mất (hoặc từ chối tin nhắn nếu nó bị trùng lặp) - bao gồm phần này trong tính toán tổng kiểm tra.

Một thuật toán MAC thông thường sẽ làm ở đây, nhưng tôi cho rằng bạn có thể muốn sử dụng một số MAC đa thức một lần để có bảo mật phù hợp với bảng đệm một lần của bạn. (Lấy khóa MAC từ các bit trước hoặc sau khóa mã hóa của bạn, nghĩa là không sử dụng lại một khóa cho cả hai mục tiêu.)


Nếu kẻ tấn công chèn hoặc xóa một số tin nhắn (hoặc một phần trong đó), con trỏ của Alice và Bob sẽ không đồng bộ và mọi liên lạc trong tương lai đều bị phá vỡ. Con trỏ là độc lập và không cần phải đồng bộ hóa nên không có sự hài hước trong tương lai nếu tin nhắn bị mất (phần bù thực tế của khóa được sử dụng để mã hóa tin nhắn được gửi cùng với tin nhắn đó). Nhưng bạn đã đúng một phần: Không đồng bộ được sử dụng một phần của khóa ở bên nhận không bị xóa vì không nhận được tin nhắn đã xóa (phần đã sử dụng sẽ bị xóa với tin nhắn nhận được tiếp theo).
dùng3123061

Nhưng bạn đúng. Trình bày algoritm đơn giản bỏ lỡ tính toàn vẹn và xác thực. Thực hiện thực tế sẽ cần phải mạnh mẽ hơn.
dùng3123061

@ user3123061 Tôi sẽ không nhún nhường tính toàn vẹn và xác thực nếu tôi là bạn. Kỹ thuật tấn công bản mã được lựa chọn thích ứng khai thác sự thiếu vắng sự bảo vệ toàn vẹn để phá vỡ tính bảo mật . Tôi sẽ đi xa hơn để nói rằng pad một lần cổ điển (đó là những gì bạn đã phát minh lại) là không an toàn , mặc dù có sự vững chắc toán học rõ ràng, chỉ vì cuộc tấn công này.
zwol

2
Tấn công cipertext được lựa chọn thích ứng là một lựa chọn tấn công khá kém đối với OTP do con người kiểm tra. OOS sẽ được chú ý và kẻ tấn công của bạn bị tấn công khá nhanh. Chỉ khi người nhận được xử lý bằng máy và mang lại phản hồi thì cuộc tấn công này mới tốt.
Joshua

@Zack Có nhiều vấn đề với OTP, nhưng không có gì đe dọa tính bảo mật. Lưu ý rằng ngay cả khi bạn đoán hoàn toàn khóa plantext + của tin nhắn trước đó, tin nhắn tiếp theo được mã hóa bằng một khóa độc lập hoàn toàn mới (cũng có kích thước đáng kể). Không có gì để thích ứng với nhiều tương tác.

4

Thật ra nó không hoàn toàn an toàn. Những gì giao thức của bạn bị rò rỉ là LENGTH của tin nhắn được truyền đạt.

Ví dụ: nếu gián điệp biết bạn sẽ trả lời bằng "có" hoặc "không" và thấy độ dài = 2 anh ta có thể suy ra đó là "không".

Thật đáng kinh ngạc là có thể suy ra bao nhiêu từ độ dài đã biết nếu người ta có thể đoán bối cảnh.


3
Mặc dù vậy, điều đó khá dễ để khắc phục, với mức độ bảo mật hợp lý, vì bạn có thể đệm tin nhắn với rác ngẫu nhiên, vì vậy độ dài tin nhắn là bội số của một kích thước khối cố định - giả sử là 256 ký tự. Điều đó sẽ đánh bại một phân tích có v đơn giản, với chi phí sử dụng OTP nhanh hơn.
Peter Bagnall

Thật vậy - vì bạn có thể gửi ~ 115kB mỗi ngày trong 50 năm tới, bạn có thể mong đợi rằng mỗi khối sẽ có ít nhất 20kb, điều đó có nghĩa là độ dài không quan trọng.
apnorton
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.