Meydan okuma
Size krakerlere karşı gizleme çukurlarına karşı başka bir casus ve casus mücadelesi sunuyoruz. Ancak bu durumda, korunacak olan veriler bir girdi değil çıktıdır .
Meydan okuma kuralları basit. Aşağıdaki özelliklere sahip bir rutin yazın:
- Rutin herhangi bir dilde yazılabilir, ancak 320 baytı aşamaz.
- Rutin, giriş olarak üç adet 32 bit işaretli tam sayıyı kabul etmelidir. 3 bağımsız değişkeni kabul eden bir işlev, tek bir 3 öğeli diziyi kabul eden bir işlev veya herhangi bir standart girdiden 3 tamsayı okuyan tam bir program biçiminde olabilir.
- Rutin bir imzalı 32 bit tamsayı çıkarmalıdır.
- Tüm olası girişlerde, rutin 2 ile 1000 (dahil) benzersiz değer arasında çıkış yapmalıdır. Bir rutinin verebileceği benzersiz değerlerin sayısına anahtarı denir .
Örnek olarak, C programı
int foo( int i1, int i2, int i3 ) {
return 20 + (i1^i2^i3) %5;
}
9, bir anahtar vardır çünkü (umutla) geçmesi ancak çıkış Dokuz değer 16
, 17
, 18
, 19
, 20
, 21
, 22
, 23
, ve 24
.
Bazı ek sınırlamalar aşağıdaki gibidir:
- Rutin tam olarak deterministik ve zamanla değişmez olmalı, aynı girişler için aynı çıkışları döndürmelidir. Rutin, sahte sayı üreticilerine çağrı yapmamalıdır.
- Rutin, dosyalardaki veriler, sistem değişkenleri veya ezoterik dil özellikleri gibi "gizli değişkenlere" güvenemeyebilir. Örneğin, sabitler kodun kendisinde açıkça tanımlanmadığı sürece, rutinler genellikle sabitlere başvurmamalıdır. Derleyici tuhaflıklarına, matematiksel olarak tanımlanmamış işlemlerden elde edilen çıktılara, aritmetik hatalara vb. Dayanan rutinler de kesinlikle önerilmez. Şüphe duyduğunuzda lütfen sorun.
- Siz (kodlayıcı), rutinin kaç tane benzersiz çıktı üretebileceğini tam olarak bilmeli ve her çıktıyı üreten en az bir girdi dizisi sağlayabilmelisiniz. (Potansiyel olarak yüzlerce benzersiz çıktı olabileceğinden, bu set yalnızca anahtarınıza itiraz edilmesi durumunda talep edilebilir.)
Bu sorun, klasik şifrelemeye öncekinden çok daha az benzerlik gösterdiğinden, daha geniş bir kitleye erişebileceğini umuyorum.
Daha yaratıcı, daha iyi.
Puanlama
Bayt sayısı başına en kısa çatlaksız gönderim kazanan (lar) olarak ilan edilecektir.
Herhangi bir karışıklık varsa, lütfen sormaya veya yorum yapmaya çekinmeyin.
Karşı Mücadele
Kendi rutinlerini sunanlar da dahil olmak üzere tüm okuyucular başvuruları "kırmaya" teşvik edilmektedir. Bir anahtar, ilgili yorumlar bölümünde yayınlandığında gönderimi bozulur. Eğer bir başvuru değiştirilmeden veya çatlatılmadan 72 saat devam ederse, "güvenli" kabul edilir ve daha sonra çatlama başarısı yarışma uğruna göz ardı edilir.
Okuyucu başına gönderim başına yalnızca bir çatlama girişimine izin verilir. Örneğin, X kullanıcısına gönderirsem: "anahtarınız 20" ve yanılıyorsam, X kullanıcısı tahminimi yanlış olarak reddeder ve artık bu gönderim için ek tahmin gönderemeyeceğim.
Çatlamış başvurular çekişmeden kaldırılır ("güvenli" olmaları koşuluyla). Onlar düzenlenmemelidir. Bir okuyucu yeni bir rutin göndermek istiyorsa, bunu ayrı bir cevapta yapmalıdır.
Bir krakerin puanı, kırdığı başvuruların sayısıdır (uyumlu olsun ya da olmasın). Aynı sayılara sahip krakerler için, sıralama tüm çatlak başvurulardaki toplam bayt sayısına göre belirlenir (daha yüksek, daha iyi).
En yüksek puana sahip kraker (ler) kazanan kazanan rutinleri geliştirenlerle birlikte kazanan olarak ilan edilecektir.
Lütfen kendi gönderiminizi kırmayın.
İyi şanslar. :)
Liderler Sıralaması
Son Güncelleme 2 Eyl. 10:45 EST
Taşınmaz Engelleri (çatlamayan başvurular):
- CJam, 105 [Dennis]
Durdurulamaz Kuvvetler (kraker):
- Dennis [ Java, 269 ; C, 58 ; Mathematica, 29 ]
- Martin Büttner [ Java, 245 ]
return
etc ...