Làm thế nào để xác minh số với Bob mà không biết Eve?


49

Bạn cần kiểm tra xem bạn của bạn, Bob, có số điện thoại chính xác của bạn không, nhưng bạn không thể hỏi trực tiếp anh ta. Bạn phải viết câu hỏi lên một tấm thiệp và đưa nó cho Eve, người sẽ đưa thẻ cho Bob và trả lời bạn. Bạn phải viết gì trên thẻ, ngoài câu hỏi, để đảm bảo Bob có thể mã hóa tin nhắn để Eve không thể đọc được số điện thoại của bạn?

Lưu ý: Câu hỏi này nằm trong danh sách "câu hỏi phỏng vấn google". Kết quả là, có hàng tấn phiên bản của câu hỏi này trên web và nhiều trong số chúng không có câu trả lời rõ ràng hoặc thậm chí chính xác.

Lưu ý 2: Câu trả lời lén lút cho câu hỏi này là Bob nên viết "hãy gọi cho tôi". Vâng, điều đó rất thông minh, 'bên ngoài chiếc hộp' và mọi thứ, nhưng không sử dụng bất kỳ kỹ thuật nào trong lĩnh vực CS mà chúng ta gọi là anh hùng của chúng ta là "Bob" và kẻ thù nghe trộm của anh ta là "Giao thừa".

Cập nhật:
Điểm thưởng cho một thuật toán mà bạn và Bob đều có thể hoàn thành hợp lý bằng tay.

Cập nhật 2:
Lưu ý rằng Bob không phải gửi cho bạn bất kỳ tin nhắn tùy ý nào, nhưng chỉ xác nhận rằng anh ta có số điện thoại chính xác của bạn mà không thể giải mã được, điều này có thể dẫn đến các giải pháp đơn giản hơn.


1
Nhưng "hãy gọi cho tôi" hoàn toàn không có ý nghĩa gì, anh ấy chưa có số điện thoại chính xác của bạn hoặc ít nhất bạn không chắc anh ấy có làm vậy không, vì vậy tôi không nghĩ nó rất thông minh.
Gigili

1
@Gigili nếu bạn nhận được một cuộc gọi từ anh ấy, thì anh ấy có số của bạn, nếu bạn không nhận được một cuộc gọi, thì anh ấy không nhận được.
Joe

1
Ô đúng rồi. Tôi vẫn nghĩ nó không thông minh!
Gigili

Một câu trả lời khác có thể là mật mã Caesar . Ngay cả khi Eve cố gắng tất cả các khả năng bù đắp, cô ấy không có lý do để chọn bất kỳ một chuỗi chữ số nào khác (không cố gắng gọi tất cả chúng).
Raphael

2
@Raphael Không chỉ có 10 mật mã caesar có thể có trên các chữ số?
Joe

Câu trả lời:


27

Đầu tiên chúng ta phải cho rằng Eve chỉ thụ động. Bằng cách này, ý tôi là cô ấy thật sự gửi tấm thiệp cho Bob, và bất cứ điều gì cô ấy mang lại cho Alice thực sự là phản ứng của Bob. Nếu Eve có thể thay đổi dữ liệu theo một hoặc cả hai hướng (và hành động của cô ấy vẫn không bị phát hiện) thì mọi thứ sẽ diễn ra.

(Để tôn vinh truyền thống lâu đời, hai bên trung thực tham gia vào cuộc trò chuyện được gọi là Alice và Bob. Trong văn bản của bạn, bạn nói "bạn". Tên thật của tôi không phải là "Alice", nhưng tôi sẽ trả lời như thể bạn đã viết rằng Alice muốn xác minh số điện thoại của Bob.)

Câu trả lời đơn giản (nhưng yếu) là sử dụng hàm băm. Alice viết trên thẻ: "trả lại cho tôi hàm băm SHA-256 của số điện thoại của bạn". SHA-256 là một hàm băm mật mã được cho là an toàn, theo như các hàm băm. Việc tính toán bằng tay sẽ rất tẻ nhạt nhưng vẫn có thể thực hiện được (đó là khoảng 2500 thao tác 32 bit, trong đó mỗi thao tác là một phép cộng, dịch chuyển từ hoặc xoay hoặc kết hợp các bit theo bit, Bob có thể thực hiện trong một ngày hoặc vì thế).

Bây giờ có gì yếu về điều đó? SHA-256, là một hàm băm mật mã, có khả năng chống lại "tiền giả": điều này có nghĩa là với đầu ra băm, rất khó để phục hồi đầu vào tương ứng (đó là vấn đề mà Eve gặp phải). Tuy nhiên, "rất khó" có nghĩa là "phương pháp đơn giản nhất là vũ phu: thử các đầu vào có thể cho đến khi tìm thấy kết quả khớp". Rắc rối là lực lượng vũ phu rất dễ ở đây: không có quá nhiều số điện thoại có thể có (ở Bắc Mỹ, đó là 10 chữ số, tức là chỉ 10 tỷ). Bob muốn làm mọi thứ bằng tay, nhưng chúng ta không thể cho rằng Eve rất hạn chế. Một PC cơ bản có thể thử vài triệu băm SHA-256 mỗi giây, vì vậy, Eve sẽ được thực hiện trong vòng chưa đầy một giờ (dưới 5 phút nếu cô ấy sử dụng GPU).

Đây là một vấn đề chung: nếu Bob có tính xác định (nghĩa là đối với một tin nhắn đã cho từ Alice, anh ta sẽ luôn trả lại cùng một phản hồi), Eve có thể mô phỏng anh ta. Cụ thể, Eve biết tất cả mọi thứ về Bob ngoại trừ số điện thoại, vì vậy cô hầu như chạy 10 tỷ Bob, chỉ khác nhau bởi số điện thoại giả định của họ; và cô ấy chờ đợi một trong những Bob ảo trả lại bất cứ thứ gì Bob thực sự trở lại. Lỗ hổng ảnh hưởng đến nhiều loại giải pháp "thông minh" liên quan đến mã hóa ngẫu nhiên và mã hóa đối xứng và không có gì. Đó là một lỗ hổng lớn và gốc rễ của nó nằm ở sự khác biệt lớn về sức mạnh tính toán giữa Eve và Bob (bây giờ, nếu Bob cũng có một máy tính lớn như của Eve, thì anh ta có thể sử dụng chậmhàm băm thông qua việc sử dụng nhiều lần lặp; đó là ít nhiều những gì băm mật khẩu là về, với số điện thoại thay cho mật khẩu; xem bcryptcâu trả lời này ).

e=3

  • n=pqpqnp1q1

  • n

  • nn

  • mm3 mod n

  • pqmm3 mod nm

Tính toán của Alice sẽ yêu cầu một máy tính (những gì máy tính làm luôn luôn là cơ bản và có thể thực hiện được bằng tay, nhưng một máy tính thì cực kỳ nhanh, vì vậy "việc có thể làm" có thể mất quá nhiều thời gian để thực hành; giải mã RSA bằng tay sẽ mất nhiều thời gian tuần).

(Trên thực tế chúng ta có thể tính toán bằng tay nhanh hơn bằng cách sử dụng mã hóa McEliece , nhưng sau đó khóa công khai - những gì Alice viết trên thẻ - sẽ rất lớn, và một thẻ đơn giản là không làm được; Eve sẽ phải vận chuyển một cuốn sách đầy đủ các chữ số.)


1
Chỉ cần một nhận xét nhanh, một điểm yếu khác trong giao thức đầu tiên (Alice nói "gửi cho tôi số băm của số điện thoại") là nó dễ bị tấn công lại. Nếu bạn đang thực hiện điều này trong thế giới thực, Alice nên gửi một chuỗi ngẫu nhiên (được gọi là "nonce") được băm cùng với số điện thoại.
Bút danh

1
Bạn nói rằng "mọi thứ đều ổn" nếu Eve có thể sửa đổi tin nhắn, nhưng đây không hẳn là một nguyên nhân bị mất. Sử dụng RSA, chúng tôi thực sự có thể bảo vệ thông điệp chống lại các cuộc tấn công MITM. Gửi câu hỏi: "Bạn có số điện thoại của tôi không?", Cộng với khóa công khai của bạn, cộng với chữ ký (tin nhắn + số điện thoại của bạn) được ký bằng khóa riêng của bạn. Nếu Eve cố gắng sửa đổi tin nhắn (thay đổi khóa chung thành của cô ấy), cô ấy sẽ không thể tạo chữ ký hợp lệ vì cô ấy không biết số điện thoại của bạn.
stevendesu

15

Trông giống như một ứng dụng cổ điển của Hệ thống mật khóa công khai như RSA .

Bạn gửi khóa công khai của mình cùng, BoB mã hóa số điện thoại của bạn từ danh sách liên lạc của anh ấy và gửi lại cho bạn.


5
Với Bob và Eve, đó có lẽ là ý tưởng chính. Có thực tế trong bối cảnh này (bút chì và giấy)? Ngoài ra, tôi đã hy vọng nhiều hơn một liên kết đến một bài viết trên wikipedia với cờ "bài viết này cần chỉnh sửa".
Joe

@Joe: Tôi đã chỉnh sửa để bao gồm một liên kết khác. Tôi khá chắc chắn rằng bạn đã nghe nói về RSA. RSA có lẽ đủ thực tế, vì viết rằng 1000 chữ số sẽ không mất nhiều thời gian.
Aryabhata

14

Một trong những điều cơ bản nhất bạn có thể làm là trao đổi khóa Diffie-Hellman . Nó không yêu cầu bạn phải thiết lập các khóa trước khi bắt đầu giao tiếp vì nó đàm phán một cách theo cách mà người nghe không thể tự lấy được khóa. Xem bài viết Wikipedia toàn diện để biết chi tiết.

pgpggamodpa

  • gbmodpb
  • gabmodp

gamodpgbmodpgabmodp

Miễn là thực hiện đúng và cả người giao tiếp và kẻ tấn công đều có cùng khả năng tính toán theo ý của họ, điều này là an toàn.


2

Bob không phải gửi bất kỳ tin nhắn nào mà bạn có thể giải mã. Anh ta chỉ phải chứng minh với bạn rằng anh ta có số điện thoại của bạn. Do đó, Hàm băm mật mã , (mã hóa một chiều) cung cấp một giải pháp thay thế cho hệ thống mật mã khóa công khai. SHA-2 hiện là một ví dụ phổ biến về chức năng như vậy.

Trong chiến lược này, bạn không bao giờ phải giải mã tin nhắn của Bob cho bạn. Bạn nói với Bob hàm băm nào bạn muốn anh ta sử dụng, ví dụ: "Bob, vui lòng sử dụng SHA-2 để mã hóa số điện thoại của tôi và để Eve chuyển kết quả lại cho tôi". Sau đó, bạn sử dụng cùng một thuật toán để băm số điện thoại của mình và kiểm tra xem bạn có nhận được cùng hàm băm mà Bob có không. Rất khó có khả năng hai số điện thoại khác nhau sẽ dẫn đến cùng một hàm băm và vì vậy bạn có thể xác định liệu Bob có số điện thoại chính xác của mình hay không.

Nếu bạn, Bob và Eve không có máy tính để tính toán hàm băm (hoặc thực hiện tấn công vũ phu), có thể sử dụng hàm băm hy sinh một số bảo mật chống lại các cuộc tấn công vũ phu nhưng dễ dàng hơn cho bạn và Bob tính toán.


Tôi đã viết cùng một câu trả lời! Xui xẻo. Tôi sẽ đăng nó bằng mọi cách vì tôi đã dành thời gian cho nó.
Gigili

@Gigili Tôi đã hy vọng ai đó sẽ viết ra câu trả lời này, nhưng tôi đã quyết định khi tôi thấy rằng không ai đưa ra giải pháp thay thế này ... Tôi vẫn đang tìm kiếm một phiên bản thân thiện với bút chì và giấy. Thành thật mà nói, tôi sẽ không muốn nhờ bạn tôi làm RSA hoặc SHA-2 bằng tay.
Joe

Vấn đề là, mọi thuật toán đơn giản có thể được thực hiện bằng tay sẽ được mã hóa bởi Eve.
Gigili

@Gigili bạn có nghĩa là "giải mã bởi đêm giao thừa"? Vấn đề rất hạn chế. Có vẻ như cần có một hàm băm một chiều đơn giản hơn từ các số nguyên 7 chữ số mà Eve không thể hoàn tác để lấy lại số ban đầu.
Joe

Rất tiếc, tôi có nghĩa là giải mã rõ ràng.
Gigili

0

Một giải pháp đơn giản sẽ là:

Cả Alice và Bob đều đồng ý về cùng một màu. và sẽ không có vấn đề gì nếu Eve biết điều đó, chúng ta sẽ gọi nó là P. Hãy nói rằng nó có màu vàng. Bây giờ, Alice và Bob đều chọn ngẫu nhiên một màu riêng tư, nói "x". Alice chọn màu đỏ và Bob chọn màu xanh. Bây giờ họ trộn chúng lại với P. Alice giờ có màu cam và Bob có màu xanh lá cây. Alice gửi màu cam cho Bob, và Bob gửi màu xanh lục của anh ta cho Alice Eve bây giờ biết về màu vàng, cam và xanh lục nhưng Alice cũng biết màu đỏ riêng tư của cô ấy, và Bob biết màu xanh riêng của anh ta, mà không ai biết. Cả Alice và Bob đều lấy màu riêng tư ban đầu của họ và thêm chúng vào màu mà họ vừa trao đổi. Bây giờ, nếu họ trộn các màu riêng tư ban đầu của họ, đỏ và xanh lam, thành màu được chia sẻ, cả hai cuối cùng có cùng màu, loại nâu hoặc đỏ gạch.

Thay vì trộn các màu lại với nhau, bạn có thể sử dụng sao cho p là số nguyên tố lớn và g là gốc nguyên thủy của p vì nếu bạn thực hiện cho bất kỳ x, kết quả (một số từ 0 đến p - 1) có khả năng tương đương với bất kỳ số nào, đó là lý do tại sao có một gốc nguyên thủy. Nếu p là số nguyên tố 2n + 1 sao cho n cũng là số nguyên tố, thì bạn biết rằng 2 là gốc nguyên thủy của p (có nghĩa là bạn không phải bận tâm tính toán gốc nguyên thủy, loại này rất khó) bí mật được chia sẻ = cho Bob và cho Alice.g xgx(modp)A xgx(modp)B yAx(modp)By(modp)


Tôi nghĩ bạn có thể viết một cái gì đó như thế này trên thẻ:

Số này là bội số của 3,5 và 7 (ví dụ).

Có ( là số chữ số) khả năng và ý tưởng đó sẽ chỉ làm mất hiệu lực một số khả năng cho người biết ý tưởng về nó. Vì vậy, giải mã bởi Eve sẽ không xảy ra. n(10)nn


Đây là lời tường thuật về hình ảnh được tìm thấy trên bài viết Wikipedia về trao đổi khóa Diffie-Hellmann . Bạn ít nhất nên đề cập đến nguồn của bạn.
Raphael

@Raphael: Tôi không biết điều đó bản thân mình, ai đó đã giải thích cho tôi và tôi nghĩ đó là một ý tưởng tốt.
Gigili

0

Chỉ cần yêu cầu Bob nhân số đó với 2 hoặc 3 hoặc bất cứ thứ gì khác và xor số đó với chính số đó. Nó có thể thực hiện được bằng tay và có thể đảo ngược nếu biết số lượng. Không có sha, rsa hoặc md5. Chỉ là toán học đơn giản.


3
Câu trả lời này là sai. Đơn giản, có thể làm bằng tay, và hoàn toàn không an toàn. Nó chỉ đơn giản là không hoạt động. Eve có thể phục hồi rất nhiều thông tin về số điện thoại từ đây.
DW

0

Gửi cho Bob một từ mã được mã hóa bằng số điện thoại của bạn; nếu anh ta gửi lại cho bạn từ mã bạn biết anh ta có đúng số.

Điểm yếu là Eve có thể mô phỏng Bob, vì vậy chỉ cần thử mọi số điện thoại cho đến khi cô ấy nhận được một số tiền mã hóa khi Bob trở lại.

Vì vậy, hãy nhờ Bob nối một số ngẫu nhiên rất lớn vào từ mã sau đó mã hóa nó trước khi gửi lại cho bạn. Điều này làm cho không gian tìm kiếm của Eves lớn như bạn muốn.


Điều này có vẻ không đúng. Nếu Bob có số sai, trước tiên anh ta sẽ giải mã và nhận được một từ mã sai. Sau đó, anh ta thêm số ngẫu nhiên vào từ mã và mã hóa sai khóa. Khi tin nhắn được nhận và giải mã bằng khóa chính xác, đoạn đầu tiên của tin nhắn được khôi phục có thể có thể là từ mã chính xác mặc dù số Bob có sai.
Được thông báo vào

@randomA Bạn chỉ cần làm cho (các) từ mã đủ dài để xác suất xảy ra là rất nhỏ, bạn không quan tâm đến nó.
Ian Ringrose

Những gì bạn nói là đúng, nhưng giải pháp được lựa chọn cũng rất hay về vấn đề này. Tôi chỉ không đồng ý với giải pháp được chọn trong phần "vì vậy một số thông tin được bảo mật được chuyển từ Bob sang Alice". Nếu một người sử dụng tin nhắn đệm đủ lớn và không có ký hiệu được sử dụng để thể hiện số điện thoại, thì Bob có thể ngẫu nhiên đặt số điện thoại vào đó và Alice có thể dễ dàng khôi phục số điện thoại từ tin nhắn được giải mã mà không cần biết các bước ngẫu nhiên mà Bob đã thực hiện ( không có thông tin truyền tải tự tin là cần thiết trong trường hợp này).
Được thông báo vào

-1

Tôi sẽ viết khoảng 10 số điện thoại vào thẻ và trong số đó tôi sẽ đảm bảo rằng số của tôi sẽ đến bên cạnh số của Bob và tôi sẽ đề cập đến "Này Bob, số của tôi nằm bên cạnh số của bạn, vui lòng xác minh" :)


1
giả sử tôi biết số của bob và đêm trước không: P
everlasto

-1

Tôi nghĩ rằng câu hỏi đơn giản hơn nhiều so với mọi người nghĩ. Chúng tôi được yêu cầu xác minh rằng số Bob có là chính xác (hoặc có thể là không chính xác). Vì chúng tôi đang "kiểm tra" nếu số đó là chính xác, có thể giả định rằng Bob đã có số của bạn. Do đó, không cần gửi cho Bob số của bạn trong một số mã. Câu trả lời của tôi sẽ là, "Bob thân mến, xin vui lòng gọi số của tôi. Cảm ơn, Alice"


1
Câu hỏi đã loại trừ rõ ràng câu trả lời tầm thường này.
David Richerby

-2

hãy thử làm một trik chơi như thế này

Giải pháp1: nếu số là 37, bản đồ băm sẽ như thế này

01 07

15 12

25 20

31 36

49 43

53 50

60 62

72 72

85 82

91 94

và làm tương tự cho 10 chữ số hoặc thậm chí nhiều hơn chỉ để gây nhầm lẫn: P

Solution2: hoặc xây dựng một đa thức trong đó số của bạn trở thành một số duy nhất khác

Giải pháp 3: viết điều này trong thư "anh chàng gọi cho tôi"

Solution4: viết một hàm theo cách nó hoạt động trên mọi chữ số và trả về 0 sau đó anh ta gửi giải pháp đúng hoặc sai5: nếu cả hai đầu chia sẻ một hàm băm chung ... nó làm cho cuộc sống rất dễ dàng


Không rõ ràng về cách thức chương trình của bạn mã 37.
David Richerby

tất cả những gì chúng ta cần làm là bản đồ ... 31 in đậm có nghĩa là 3 ở vị trí 1 .... 72 có nghĩa là 7 ở vị trí 2 ... xin lỗi nếu nó không trực quan để hiểu
Ajay Reddy

Điều này cần được giải thích chi tiết trong câu trả lời. Nhưng, nghiêm túc, nếu đó là sơ đồ mã hóa của bạn, nó không thực sự an toàn, phải không?
David Richerby

-2

Tôi nghĩ rằng chúng ta có thể làm điều này bằng cách sử dụng các thao tác bit khôn ngoan cơ bản hoặc có thể tùy chỉnh nó cho công việc giấy và bút chì. Nếu số lượng alice là ví dụ: 663 thì cô ấy chỉ có thể chuyển đổi số lượng bằng phương pháp này. Chuyển đổi từng chữ số thành biểu diễn nhị phân tương đương, nói điều này là A 663-> 110 110 011 so với đảo ngược các bit tương ứng cho mỗi số riêng lẻ nói điều này là B-> 011 011 110 Bây giờ hãy làm A và B-> 010 010 010 Bây giờ hãy gửi số này đến bob và yêu cầu làm tương tự nếu kết quả giống nhau, yêu cầu anh ta nói có hoặc không. Trong trường hợp này, eve sẽ không thể giải mã số và có xác suất rất thấp để có các số khác nhau kết thúc cùng một đại diện này. Cách duy nhất có thể đoán là bằng cách viết tất cả các kết hợp có thể và sau đó thử tất cả nhưng để phục vụ rằng chúng ta có thể làm phức tạp thêm điều này bằng cách sử dụng dịch chuyển trái hoặc phải và thêm các bit giả.


Điều này không hoạt động. Đầu tiên, bit giữa của mỗi nhóm 3 bit không bị ảnh hưởng. Thứ hai, bit thứ nhất và thứ ba của mỗi nhóm của thông điệp được truyền sẽ luôn giống nhau và thường là 0, điều này sẽ dẫn đến rất nhiều kết quả dương tính giả. Thứ ba, và nghiêm trọng, ba bit chỉ có thể đại diện cho tám giá trị, nhưng một chữ số thập phân có thể lấy bất kỳ một trong mười giá trị. Thứ tư, câu cuối cùng của bạn về cơ bản là "Ồ, và nếu điều đó không hiệu quả, hãy thử một cái gì đó phức tạp hơn." Nhu la?
David Richerby

-3

Hãy gọi cho tôi (tên tôi là 1001001). Nếu bạn không thể liên lạc với tôi, xin vui lòng ghi lại số điện thoại mà bạn có và yêu cầu Eve trả lại cho tôi.

Giải thích: nếu Bob có số chính xác của tôi, anh ta có thể liên lạc với tôi thì tôi biết đó là số chính xác #; nếu Bob không nhận được số đúng của tôi, Eve cũng không thể đọc số điện thoại (chính xác) của tôi. Bằng cách này, tôi đã kiểm tra xem bạn của tôi, Bob, có số điện thoại chính xác của tôi hay không.


to everlasto: Eve có thể liên lạc với Bob để rất có thể cô ấy có # của anh ấy. Do đó, nếu bạn hỏi "Này Bob, số của tôi nằm cạnh số của bạn, vui lòng xác minh", Eve sẽ biết bạn #.
Pobol Wong

1
Câu hỏi nói rõ rằng bạn không thể gửi cho Bob một tấm thiệp nói "hãy gọi cho tôi". Và Bob viết số không chính xác trên thẻ nếu anh ta không thể thông qua không thêm bất cứ điều gì.
David Richerby

Tôi đã viết một chương trình mã hóa / giải mã LZW trước đây. Tôi có thể yêu cầu Bob sử dụng nó để gửi cho tôi số được mã hóa của điện thoại của tôi và cũng có thể sử dụng nó để mã hóa phần chính xác của số điện thoại của tôi cho anh ta.
Pobol Wong

với David Richerby: câu hỏi chỉ đề cập đến "bạn không thể hỏi anh ấy trực tiếp" có nghĩa là tôi, 1001001, không thể hỏi trực tiếp Bob, nhưng có thể yêu cầu anh ấy gọi cho tôi bằng điện thoại # anh ấy nhận được.
Pobol Wong

Đọc câu hỏi cẩn thận hơn. "Ghi chú 2" trong câu hỏi từ chối giải pháp gửi ghi chú yêu cầu Bob gọi cho bạn vì nó không sử dụng bất kỳ khoa học máy tính nào.
David Richerby
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.