Eve bilmeden Bob ile sayı doğrulamak nasıl?


49

Arkadaşın Bob'un doğru telefon numaran olduğunu kontrol etmelisin, ama ona doğrudan soramazsın. Soruyu bir karta yazmalı ve kartı Bob'a götürüp cevabı size iade edecek Havva'ya vermelisiniz. Bob'un mesajı kodlayabilmesini sağlamak için Havva'nın telefon numaranızı okuyamaması için, sorunun yanında kartta ne yazmalısınız?

Not: Bu soru "google röportaj soruları" listesindedir. Sonuç olarak, bu sorunun web üzerinde tonlarca sürümü vardır ve birçoğunun net ve hatta doğru cevapları yoktur.

Not 2: Bu sorunun keskin cevabı Bob'un "beni ara" yazması gerektiğidir. Evet, bu çok zekice, 'kutunun dışında' ve her şey, ancak kahramanımız "Bob" ve gizlice dinleyen rakibi "Havva" olarak adlandırdığımız CS alanında hiçbir teknik kullanmıyor.

Güncelleme:
Sizin ve Bob'un ikinizin de elle yapabileceği bir algoritma için bonus puan.

Güncelleme 2:
Bob'un size herhangi bir keyfi mesaj göndermesi gerekmediğini unutmayın; ancak Havva'nın kodunu çözmeden, daha basit çözümlere yol açabilecek veya açmayacak şekilde, doğru telefon numaranız olduğunu doğrulayın.


1
Ama "beni ara" hiç mantıklı gelmiyor, henüz doğru telefon numaranız yok ya da en azından öyle olduğundan emin değilsiniz, bu yüzden çok akıllıca olduğunu sanmıyorum.
Gigili

1
@Giliç ondan bir çağrı alırsanız, o zaman numaranız var, bir çağrı yapmazsanız, o zaman o da olmaz.
Joe

1
Ah, doğru. Hala zekice olmadığını düşünüyorum!
Gigili

Yanaktaki başka bir dil cevabı Sezar şifresi olabilir . Eve, olası tüm ofsetleri denese bile, başka herhangi bir rakam dizisini seçmek için hiçbir nedeni yoktur (hepsini aramaya çalışmaktan kısadır).
Raphael

2
@Raphael Rakamlar üzerinde yalnızca 10 olası sezar şifresi yok mu?
Joe

Yanıtlar:


27

İlk önce Havva'nın sadece pasif olduğunu varsaymalıyız. Bununla, kartı doğru bir şekilde Bob'a gönderdiğini ve Alice'e geri getirdiği şeyin gerçekte Bob'un tepkisi olduğunu kastediyorum. Eğer Havva, verileri her iki yönde ya da her iki yönde de değiştirebilirse (ve eylemi tespit edilmeden kalırsa), her şey yolunda gider.

(Uzun süredir devam eden gelenekleri onurlandırmak için, sohbete katılan iki dürüst partiye Alice ve Bob denir. Metninizde "siz" dedin. Gerçek adım "Alice" değil, ama aynen yazmışsınız gibi cevaplayacağım. o Alice Bob'un telefon numarasını doğrulamak istiyor.)

Basit (ama zayıf) cevap karma fonksiyon kullanmaktır. Alice kartta yazıyor: "bana telefon numaranızın SHA-256 hashini döndürün". SHA-256 , karma işlevleri devam ettiği sürece güvenli olduğuna inanılan bir şifreleme karma işlevidir. Elle hesaplama yapmak sıkıcı olabilir ancak yine de yapılabilir (bu, her işlemin bir ekleme, bir sözcük kayması veya döndürme veya bitlerin bit bir birleşimi olduğu yaklaşık 2500 32 bitlik işlemdir; Bob bir günde yapabilir. yani).

Şimdi bunun nesi zayıf? Kriptografik bir karma işlevi olan SHA-256, "ön görüntülere" dirençlidir: bu, bir karma çıktısı verildiğinde karşılık gelen bir girişi kurtarmak için çok zor olduğu anlamına gelir (Eve'in karşılaştığı sorun budur). Bununla birlikte, "çok zor", "en kolay yöntem kaba kuvvet:" bir eşleşme bulunana kadar olası girdileri denemek "anlamına gelir. Sorun şu ki, kaba kuvvet burada kolay: Çok fazla olası telefon numarası yok (Kuzey Amerika'da, 10 basamak, yani sadece 10 milyar). Bob işleri el ile yapmak istiyor, ancak Havva'nın bu kadar sınırlı olduğunu kabul edemeyiz. Temel bir PC saniyede birkaç milyon SHA-256 karma deneyebilir, böylece Havva bir saatten az bir sürede (GPU kullanıyorsa 5 dakikadan az bir sürede) yapılır.

Bu genel bir sorundur: Bob deterministik ise (yani Alice'in verdiği bir mesaj için, her zaman aynı cevabı verir), Eve onu taklit edebilir. Yani, Havva Bob ile ilgili telefon numarası dışındaki her şeyi bilir, bu yüzden neredeyse sadece varsayılan telefon numaralarına göre farklılık gösteren 10 milyar Bobs çalıştırır; ve gerçek Bob’lardan birinin gerçek Bob’un gerçekte ne getirdiğini geri getirmesini bekler. Kusur, rastgele olmayan bağları ve simetrik şifrelemeyi içeren ve pek çok farklı türde "akıllı" çözümü etkiler. Güçlü bir kusur olduğunu ve Bob eğer şimdi Havva ve Bob (arasında işlem gücünün devasa fark kök yalanları da Eve'in büyüklüğünde bir bilgisayar vardı, sonra bir kullanabiliriz yavaşbirçok yinelemenin kullanımıyla karma fonksiyonu; Bu, şifre yerine telefonun şifrelenmiş olduğu, aşağı yukarı ne olduğu; bkz Bcrypt ve ayrıca bu cevabı ).

Dolayısıyla, olmayan bir zayıf çözüm gerekir Bob'un kısmında bazı rastgeleliğine içerir: Bob yazı tura veya art arda zar atmak ve onun hesaplamalarda değerleri enjekte edilmelidir. Dahası, Havva Bob’un yaptıklarını çözemez, ancak Alice’in yapabilmesi gerekir, bu yüzden bazı bilgiler Bob’dan Alice’e gizlilikle aktarılır . Buna asimetrik şifreleme veya en azından asimetrik anahtar anlaşması denir . Bu sınıfın hesaplanması, ancak yine de makul olarak güvenli olması için en basit algoritması , PKCS # 1 v1.5 dolgusu ile RSA'dır . RSA, genel üs olarak kullanabilir . Böylece protokol böyle gider:e=3

  • Alice , ve benzer büyüklükte bir tamsayı olduğu büyük bir tamsayısı üretir , böylece güvenliği sağlamak için yeterlidir (yani 2012'den itibaren en az 1024 bit). Ayrıca, Alice, ve 3'ün katları olmayacak şekilde ayarlamalıdır.p q n p - 1 q - 1n=pqpqnp1q1

  • Alice kartta yazar .n

  • Bob, ilk olarak telefon numarasını , PKCS # 1 ile tanımlandığı şekilde kadar bir byte dizisine doldurur (bu, 00 02 xx xx ... xx 00 bb bb .. bb'dir, burada 'bb', kodlanan on bayttır) telefon numarası ve 'xx', , 1024 bitlik bir tamsayıysa, toplam 128 bayt uzunluk için rastgele sıfır olmayan bayt değerleridir ).nnn

  • Bob, bayt sırasını büyük bir tamsayı değeri (big-endian kodlaması) olarak yorumlar ve değerini hesaplar (yani bu çok büyük tamsayılarla bir çift çarpma, sonra bir bölmedir, sonuç bölümün kalanı). Bu hala elle yapılabilir (ancak yine orada bir günün daha iyi bir parçası olacak). Sonuç, Bob'un Alice'e geri gönderdiği şey.m 3 m o d nmm3 mod n

  • Alice bilgisini kullanır ve kurtarmak gelen Bob gönderdiği. RSA'daki Wikipedia sayfası , bu işlem hakkında oldukça açık açıklamalar içeriyor. Alice'in , dolguyu kaldırabilir ('xx' sıfır değildir, bu nedenle ilk 'bb' baytı açık bir şekilde yerleştirilebilir) ve sonra sahip olduğu telefon numarasıyla karşılaştırabilir.q m m 3 m o d n mpqmm3 mod nm

Bir bilgisayar gerektirecektir Alice'in hesaplama (bilgisayar yaptığı iştir hep elle ilk ve yapılabilir, ancak "yapılabilir" pratikte yapmak için çok fazla zaman alabilir bu yüzden bir bilgisayar, ona hızlı devilishly olduğu; RSA şifre çözme elle birçok alacaktı haftalar).

(Aslında , McEliece şifrelemesini kullanarak elle daha hızlı bir hesaplama yapabilirdik , ama sonra genel anahtar - Alice'in kartta yazdığı şey çok büyük olurdu ve bir kart yapmazdı; Eve tam bir kitap taşımak zorunda kalacaktı. basamak.)


1
Kısa bir yorum, ilk protokoldeki bir diğer zayıflık (Alice, "bana telefon numarasının bir özetini gönder" diyor), tekrarlama saldırısına karşı savunmasız olduğu yönünde. Bunu gerçek dünyada uyguluyorsan, Alice, telefon numarasıyla birlikte gelen rastgele bir dize ("nonce" denir) göndermelidir.
Sahte

1
Eve mesajı değiştirebiliyorsa "her şeyin yoluna girdiğini" söylediniz, ancak bu mutlaka kaybedilmiş bir sebep değildir. RSA'yı kullanarak mesajı MITM saldırılarına karşı da koruyabiliriz. Bir soru gönderin: "Telefon numaram var mı?", Artı genel anahtarınız ve ayrıca özel anahtarınızla imzalanmış bir imzanın (mesaj + telefon numaranız). Eve mesajı değiştirmeye çalışırsa (genel anahtarı kendisininkiyle değiştir) telefon numaranı bilmediğinden geçerli bir imza oluşturamaz.
stevendesu

15

Klasik bir uygulaması gibi görünüyor Açık Anahtar Kriptosistemi gibi RSA .

Genel anahtarınızı gönderirsiniz, BoB telefon numaranızı rehber listesinden şifreler ve size geri gönderir.


5
Bob ve Eve verildiğinde, muhtemelen anahtar fikir bu olmalıydı. Bu bağlamda pratik midir (kalem ve kağıt)? Ayrıca, "bu makalenin düzenlenmesi gerekiyor" bayrağını içeren bir wikipedia makalesine bağlantıdan biraz fazlasını umuyordum.
Joe

@Joe: Başka bir bağlantı eklemek için düzenleme yaptım. RSA'yı duyduğuna eminim. RSA büyük olasılıkla yeterince pratiktir, çünkü yazının 1000 basamağın fazla zaman almaması gerektiğini söylüyor.
Aryabhata

14

Yapabileceğiniz en temel şeylerden biri bir Diffie-Hellman anahtar değişimi . İletişim başlamadan önce, anahtar dinleyicilerin anahtarın türetemeyeceği şekilde anlaşması için anahtarların kurulmasını gerektirmez. Ayrıntılar için kapsamlı Wikipedia makalesine bakın.

pgpggamodpa

  • gbmodpb
  • gabmodp

gamodpgbmodpgabmodp

Düzgün bir şekilde uygulandığı ve hem iletişimciler hem de saldırganın emrinde aynı hesaplama gücüne sahip oldukları sürece, bu güvenlidir.


2

Bob'in şifresini çözebileceğiniz mesajlar göndermesi gerekmez. Size sadece telefon numaranız olduğunu ispatlaması yeterlidir. Bu nedenle, Şifreleme Karma İşlevleri (tek yönlü şifreleme), genel anahtar şifreleme sistemine bir alternatif sunar. SHA-2 şu anda böyle bir işlevin popüler bir örneğidir.

Bu stratejide, Bob'un mesajının size şifresini çözmemelisiniz. Hangi işlev işlevini kullanmasını istediğinizi Bob'a söyleyin, örneğin "Bob, lütfen telefon numaramı şifrelemek ve Havva'nın sonucu bana geri iletmesini sağlamak için lütfen SHA-2'yi kullanın". Ardından, telefon numaranızı toplamak için aynı algoritmayı kullanır ve Bob'un sahip olduğu aynı hastayı alıp almadığınızı kontrol edin. İki farklı telefon numarasının aynı hasara yol açması son derece düşük bir ihtimaldir ve böylece Bob'un doğru telefon numaranıza sahip olup olmadığını belirleyebilirsiniz.

Siz, Bob ve Eve, karma işlevini hesaplamak için bilgisayarlara sahip değilse (veya kaba kuvvet saldırısı yaparlarsa) kaba kuvvet saldırılarına karşı bazı güvenlikten fedakarlık yapan karma işlevini kullanmak mümkün olabilir, ancak Bob ve sizin için çok daha kolay hesaplamak.


Ben de aynı cevabı yazıyorum! Şanssız. Yine de zaman harcadığım gibi göndereceğim.
Gigili

@Gigili Birinin bu cevabı yazacağını umuyordum, fakat henüz kimsenin bu alternatifi sunmadığını gördüğümde karar verdim ... Hala kalem ve kağıt dostu bir sürüm arıyorum. Açıkçası, arkadaşımdan RSA veya SHA-2'yi el ile yapmalarını istemem.
Joe

Sorun şu ki, elle yapılabilecek her basit algoritma Havva tarafından şifreleniyor.
Gigili

@Gigili "Eve tarafından şifresi çözülmüş" demek mi istiyorsun? Sorun çok kısıtlı. Görünüşe göre Havva'nın orijinal sayıyı geri almak için geri alamayacağı 7 basamaklı bir tamsayıdan daha basit bir tek yönlü karma olması gerekiyor.
Joe,

Hata! Belli ki şifresi çözülmüş demek istedim.
Gigili

0

Basit bir çözüm şöyle olurdu:

Hem Alice hem de Bob aynı renk üzerinde hemfikirdir. ve eğer Havva bunu biliyorsa, buna P deriz. Diyelim ki bu sarı diyelim. Şimdi, Alice ve Bob her ikisi de rastgele özel bir renk seçiyor, "x" diyorlar. Alice kırmızıyı seçer ve Bob maviyi seçer. Şimdi onları P ile birlikte karıştırdılar. Alice artık turuncu, Bob ise yeşil. Alice, turuncu rengi Bob'a gönderir ve Bob, yeşil rengini Alice Eve'e gönderir, şimdi sarı, turuncu ve yeşil renklerini bilir ancak Alice, özel rengini kırmızı olarak da bilir ve Bob, başka kimsenin bilmediği özel renk mavisini bilir. Hem Alice, hem de Bob, orijinal özel renklerini alır ve onları yeni değiştirdiklerine ekler. Şimdi, eğer orijinal özel renklerini (kırmızı ve mavi) paylaşılan renge karıştırırlarsa, ikisi de aynı renk, kahverengi veya tuğla kırmızısı ile sonuçlanır.

Renkleri bir arada karıştırmak yerine, , p'nin büyük bir asal sayı olduğu ve g'nin ilkel bir kökü olduğu için kullanabilirsiniz, çünkü herhangi bir x için yaparsanız , Sonuç (sıfır ile p - 1 arasında bir sayı) bunlardan herhangi biri olması eşit derecede muhtemeldir , bu yüzden ilkel bir kök vardır. p 2n + 1 bir asal sayıysa, n aynı zamanda asal olur, o zaman 2'nin p'nin ilkel bir kökü olduğunu bilirsiniz (yani, ilkel kökü hesaplamakla uğraşmak zorunda kalmazsınız). paylaşılan secret = Bob için ve Alice için .gx(modp)A xgx(modp)B yAx(modp)By(modp)


Kartta böyle bir şey yazabileceğinizi düşünüyorum:

Sayı 3,5 ve 7'nin katıdır (örneğin).

Orada ( olasılıklar basamak sayısıdır) ve bu fikir sadece bu konuda bilgi fikri vardır biri için bazı birkaç olanaklarını geçersiz kılar. Yani Havva'nın şifre çözmesi gerçekleşmeyecek. , N(10)nn


Bu, Diffie-Hellmann anahtar değişiminin Wikipedia makalesinde bulunan görüntünün bir anlatımıdır . En azından kaynağından bahsetmelisin.
Raphael

@Raphael: Kendim bilmiyordum, birisi bana açıkladı ve bunun iyi bir fikir olduğunu düşündüm.
Gigili

0

Bob'dan sayıyı 2 ya da 3 ya da başka bir şeyle çarpmasını isteyin ve bu sayıyı sayının kendisiyle çarptırın. Sayı biliniyorsa el ile yapılabilir ve geri çevrilebilir. Sha, RSA veya MD5 yok. Sadece düz matematik.


3
Bu cevap yanlış. Basit, elle yapılabilir ve tamamen güvensiz. Sadece düz çalışmıyor. Eve, bu telefon numarasıyla ilgili birçok bilgiyi kurtarabilir.
DW

0

Bob'a telefon numaranızla şifrelenmiş bir kod sözcüğü gönderin; Size kod kelimesini geri gönderirse, doğru numaraya sahip olduğunu bilirsiniz.

Zayıflık, Havva'nın Bob'u taklit edebilmesidir, bu yüzden Bob'un geri döndüğü sırada bazı kod sözcüğü verene kadar her telefon numarasını deneyin.

Öyleyse Bob’in kod sözcüğe çok büyük bir rasgele sayı eklemesini sağlayın, ardından size geri göndermeden önce şifreleyin. Bu Eves'in arama alanını istediğiniz kadar geniş olmasını sağlar.


Bu doğru görünmüyor. Bob yanlış numaraya sahipse, önce şifresini çözecek ve yanlış bir kod kelimesi alacak. Bundan sonra, kod sözcüğüne rasgele sayı ekler ve yanlış anahtarla şifreler. Mesaj doğru anahtarla alındığında ve şifresini çözdüğünde, kurtarılan mesajın ilk bölümü Bob'un hatalı olmasına rağmen muhtemelen doğru kod sözcüğü olabilir.
Bilgilendirilmiş

@randomA Sadece kod kelimesini yeterince uzun tutmanız gerekir, ki bu olma olasılığı o kadar küçüktür ki umursamamanız.
Ian Ringrose

Söyledikleriniz doğru, ancak seçilen çözüm de bu konuda çok güzel. Ben sadece “bazı bilgiler Bob’dan Alice’e aktarılıyor” diye seçilen çözüme katılmıyorum. Eğer biri yeterince büyük ve telefon numarasını temsil etmek için kullanılan hiçbir simge içermeyen bir doldurma mesajı kullanıyorsa, Bob telefon numarasını rastgele bir şekilde koyabilir ve Alice, Bob'un attığı rasgele adımları bilmeden, telefonun şifresini çözülen mesajdan kolayca kurtarabilir ( Bu durumda hiçbir gizli bilgi aktarımı gerekli değildir).
Bilgilendirilmiş

-1

Kartta 10 tane telefon numarası yazacağım ve aralarında numaramın Bob’un numarasının yanında olacağından emin olacağım ve "Hey Bob, numaram numaranızın yanında, lütfen doğrulayın" yazacağım.


1
Bob'un numarasını ve arifesini bilmediğimi varsayarsak: P
everlasto

-1

Bence soru herkesin düşündüğünden çok daha basit. Bob sayısının doğru olduğunu doğrulamamız gerekiyor (ya da olabileceği gibi yanlış). Numaranın doğru olup olmadığını "kontrol ettiğimiz" için Bob'un numaranıza sahip olduğu varsayılabilir. Bu nedenle, Bob’a numaranızı bazı kodlarla göndermeye gerek yoktur. Cevabım "Sevgili Bob, lütfen numaramı ara. Teşekkürler, Alice" olur.


1
Soru, bu önemsiz cevabı zaten açıkça dışlıyor.
David Richerby

-2

Böyle bir trik oyun yapmayı deneyin

solution1: sayı 37 ise karma haritası şöyle görünür

01 07

15 12

25 20

31 36

49 43

53 50

60 62

72 72

85 82

91 94

ve aynısını yapmak için 10 basamak ya da hatta daha fazlasını yapın: P

çözüm2: veya numaranızın başka bir benzersiz sayı haline geldiği bir polinom oluşturun

solution3: bunu "ahbap beni ara" harfine yazın.

solution4: her basamakta işlem yapacak şekilde bir işlev yazıp 0 döndürürse doğru veya yanlış bir çözüm gönderir5: eğer her iki uç ortak bir karma işlevi paylaşırsa ... hayatı çok kolaylaştırır


Programınızın 37 nasıl kodladığı hiç belli değil.
David Richerby

tek yapmamız gereken harita ... 31 kalın harflerle 3 konum 1 konumunda ... 72 araç 7 konum 2'de ... anlamak çok sezgisel olmasaydı özür dilerim
Ajay Reddy

Bu cevapta ayrıntılı olarak açıklanmalıdır . Ama, cidden, eğer kodlama şemanız buysa, tam olarak güvenli değil, değil mi?
David Richerby

-2

Temel bit işlemleri kullanarak bunu yapabiliriz ya da kağıt ve kalem işleri için kişiselleştirebiliriz. Eğer alice sayısı örneğin: 663 ise, bu metodolojiyi kullanarak sayıyı dönüştürebilir. Her basamağı eşdeğer ikili gösterime dönüştürün, bunu A 663-> 110 110 011 olarak söyleyin, her bir bireysel sayı için karşılık gelen bitleri ters çevirin, bunu B-> 011 011 110 olarak söyleyin. Şimdi A ve B-> 010 010 bob ve aynı şeyi yaparsa sonuç aynı olursa sor, evet veya başka bir şey dememesini isteyin. Hayır. Bu durumda, arifenin sayısının kodunu çözmesi mümkün olmayacaktır ve bu aynı temsili sona erdiren farklı sayılara sahip olma olasılığı çok düşüktür. Havva'nın tahmin edebileceği tek yol, olası tüm kombinasyonları yazarak ve sonra hepsini denemekten başka bir şey değil, bunu sola veya sağa kaydırmayı kullanarak ve sahte bitler ekleyerek daha da karmaşıklaştırabileceğimizi sağlamaktır.


Bu işe yaramıyor. İlk önce, her 3 bit grubun orta bitine dokunulmaz. İkincisi, iletilen mesajın her bir grubunun birinci ve üçüncü biti her zaman aynı ve genellikle sıfır olacaktır; bu da birçok yanlış pozitif sonuçlara yol açacaktır. Üçüncüsü ve ölümcül bir şekilde, üç bit yalnızca sekiz değeri temsil edebilir, ancak bir ondalık basamak on değerden herhangi birini alabilir. Dördüncü olarak, son cümleniz esasen “Ah, eğer işe yaramazsa daha karmaşık bir şey deneyin.” Gibi?
David Richerby

-3

Lütfen beni ara (benim adım 1001001). Bana ulaşamazsan, lütfen sahip olduğun telefon numarasını yaz ve Havva'dan beni geri göndermesini iste.

Açıklama: Bob doğru numaramı aldıysa, bana ulaşabilir, o zaman doğru olduğunu biliyorum; Bob # numaramı alamadıysa, Havva benim (doğru) telefon numaramı da okuyamıyor. Bu sayede arkadaşım Bob'un doğru telefon numaramın olup olmadığını kontrol ettim.


Everlasto'ya: Eve Bob'la temasa geçebilir, böylece muhtemelen #'una sahip olur. Bu nedenle, "Hey Bob, Numaram numaranızın yanında, lütfen doğrulayın" diye sorarsanız Havva sizi tanır.
Pobol Wong,

1
Soru açıkça Bob’a “beni ara” diyen bir kart gönderemeyeceğinizi söylüyor. Ve Bob, sayılamadıysa yanlış sayıyı kartın üzerine yazmak hiçbir şey eklemez.
David Richerby

Daha önce bir LZW kodlama / kod çözme programı yazdım. Bob'dan bana telefonumun şifreli kodunu # göndermesini isteyebilir ve ayrıca telefonumun ona # doğru kısmını kodlamak için de kullanabilirim.
Pobol Wong,

David Richerby'ye: soru sadece "doğrudan ona soramazsın" diye bahseder, bu da 1001001, Bob'a doğrudan soramaz, ama ondan beni aradığı telefon ile aramasını isteyebilmelidir.
Pobol Wong,

Soruyu daha dikkatli okuyun. Sorudaki "Not 2", herhangi bir bilgisayar bilimi kullanmadığından Bob'dan sizi aramasını isteyen bir not gönderme çözümünü reddeder.
David Richerby
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.