Underhanded C Yarışması ruhuyla, Underhanded Code Yarışması başlatıyorum. Bu yarışmanın amacı, basitçe bazı kodları uygulamaktır, aynı zamanda incelikli bir hatayı saklıyor.
Yarışma
Bir Amerikan casus ajansının BT bölümünde çalışan gizli bir Rus köstebesisiniz. Amerikalı patronunuz az önce gizli mesajları şifrelemek için bir şifre toplama algoritması uygulamanızı istedi.
Patronunuz aşağıdaki işlevi uygulamanızı istiyor:
f: String -> byte[16]
bir parolayı AES anahtarı olarak kullanıma uygun 16 baytlık bir miktara dönüştürür. Patronunuz güvenli bir fonksiyon istiyor, bu bağlamda farklı parola dizgilerinin ezici olasılıkla farklı sonuçlar üretmesi gerektiği anlamına geliyor. Örneğin , girişin md5 değerini döndürmek basit bir uygulama olacaktır f
.
Elbette , Rus casus ajansındaki asıl patronun bu süreci altüst etmeni isterdi. Göreviniz f
, Rusların geri döndürdüğü anahtarları kullanarak şifrelenmiş tüm gizli mesajların şifresini çözebilecek şekilde uygulamaktır f
.
Bunu yapmak için, f
2 ^ 128 olası çıkışların yalnızca küçük bir alt kümesini döndürecek şekilde uygulamanız gerekir . Özellikle, f
en fazla 2 ^ 16 farklı sonuç vermelisiniz , böylece Rusların şifresini çözmek istedikleri şifreli her mesaj için doğru anahtarı bulmak için kolay bir kaba kuvvet araması yapabilirsiniz.
Ancak, casusluğun ölüm cezasını taşıdığını unutmayın. Yakalanmamak için, işleviniz f
en az 2 ^ 8 farklı sonuç üretmelidir, böylece bir kaç çıktının bir denetimsel incelemesi f
bir kopyasını ortaya çıkarması olası değildir. Ve en önemlisi, menzili sınırlandırmak için girdiğiniz kod f
kasıtlı değil, istenmeyen görünmelidir. Eğer bir mahkemeye çekilirseniz, hatayı kasten mi yoksa kazara mı kullandığınızla ilgili makul bir şüpheniz olmalıdır.
yargılamak
Ben ve işe aldığım diğer iki kişi bu girişleri değerlendirecek (değerlendirmek istiyorsanız bana e-posta ile gönderiniz). Kazanan giriş için 200 itibar ödülü teklif ediyorum. Gönderiler 1 Mayıs'a kadar yüklenmelidir.
Yargılama aşağıdaki kriterleri dikkate alacaktır:
f
Spesifikasyona uyuyor mu , yani 2 ^ 8 ve 2 ^ 16 olası çıkışlar üretiyor mu? Bunların zor sınırlar olduğunu düşünmeyin, ancak menziliniz dışındaysanız puanları düşeriz.- Böcek, kasten istemeden yapılan bir hatanın sonucu mu?
f
Görünüşün çıktıları rastgele görünüyor mu?- Uygulamanız ne kadar kısa
f
olursa, o kadar iyidir. - Uygulamanız ne kadar net
f
olursa, o kadar iyidir.
notlar
Kodunuzu uygulamak için herhangi bir dili kullanabilirsiniz. Görüşte bir hatayı gizlemeye çalışıyorsunuz, bu yüzden karışık kod önerilmiyor.
İyi bir sunum yapan şey hakkında bir fikir edinmek için önceki Underhanded C yarışmasının kazananlarından bazılarına bakmak isteyebilirsiniz .
Giriş dizeleri basılabilir (32 - 126, dahil) olacaktır. İsterseniz makul bir maksimum uzunluk kabul edebilirsiniz.