Şifrəni açma tapşırığı
Gələcəkdə kriptoqrafiya ilə bağlı hər hansı tədqiqat və nəşr, milli təhlükəsizlik səbəbindən dünya miqyasında qanunsuz elan ediləcək. Bu qərar başa düşüləndir və bütün hökumətlər tərəfindən geniş şəkildə qəbul edilir - əgər kriptoqrafiya ictimaiyyətin mülkiyyətinə çevrilərsə, köhnə dövrlərdə olduğu kimi, hər kəs (hətta cinayətkarlar və terrorçular) onu asanlıqla istifadə edərək öz cinayət planlarını milli və beynəlxalq təhlükəsizlik qüvvələrindən gizlədə bilər. Buna görə də, kriptoqrafik alqoritmlərin və sistemlərin nəşri dayandırılacaq və öz sirlərini etibarlı şəkildə qorumaq istəyən hər kəs öz alqoritmlərini icad etməyə məcbur olacaq.
ACM Korporasiyasının sirlərini öyrənmək istəyən bir çox rəqibi var. Bundan əlavə, öz sirlərini qorumaq işi, daxili ACM korporasiyasının xətləri yaxşı qorunduğu halda, asanlıqla dinlənilə bilən qitələrarası rabitə xətlərindən istifadə etməyə məcbur olmaları ilə çətinləşir. Beləliklə, ACM korporasiyası İnterkontinental Kriptoqrafik Mühafizə Kodu (İKMK) icad etdi, ondan çox qürur duyurlar və onun çox etibarlı olduğu düşünülür - heç kim onu sındırmağa cəhd etməyib, amma bu tezliklə dəyişəcək.
Bir qrup haker, adını açıqlamayan bir rəqib şirkət tərəfindən İKMK-nı oğurlamaq üçün işə götürüldü. İlk addım olaraq, onlar ICPC üçün proqram təminatı hazırlayan bir proqramçını rüşvətlə ələ aldılar və İKMK-nın necə işlədiyini öyrəndilər. Məlum oldu ki, İKMK çox uzun bir açardan istifadə edir, bu açar bəzi mürəkkəb və təsadüfi fiziki proseslər tərəfindən yaradılan baytların ardıcıllığıdır. Bu açar həftədə bir dəfə dəyişir və həftə ərzində qitələrarası rabitə xətləri ilə göndərilən bütün mesajların şifrələnməsi üçün istifadə olunacaq. Bu proqramçı həmçinin onlara qürurla bildirdi ki, İKMK dünyanın ən sürətli kodudur, çünki (kodun mürəkkəb yaradılma sistemi nəzərdə tutulur), onlar sadəcə mesajın baytları və açarın baytları arasında bitwise XOR əməliyyatı yerinə yetirirlər. Yəni, i-ci şifrələnmiş mesajın baytı E_i = K_i XOR C_i, burada K_i açarın baytı, C_i isə açıq mətnin ilkin mesajının baytıdır.
İKMK-nın necə işlədiyini öyrəndikdən sonra, onlar hər həftə açarı etibarlı şəkildə əldə etməyin yolunu axtarmağa başladılar, bu, ACM korporasiyasının bütün qitələrarası əlaqələrini dinləmək üçün hələ də çatışmayan yeganə şeydir (qitələrarası xətlərdə mesajların ələ keçirilməsi həqiqətən çətin bir iş oldu). Açarı qoruyan və yayan təhlükəsizlik xidmətinin işçilərini rüşvətlə ələ keçirmək cəhdi uğursuz oldu, çünki təhlükəsizlik xidmətinin işçiləri (öz peşələrinin xüsusiyyətlərinə görə o dövrün ən yüksək maaşlarından birinə sahibdirlər) rüşvət üçün çox bahalı oldular.
Alternativ həll yolları axtararkən, onlar müxtəlif işçilər və şöbələr üçün həftəlik bülletenlər göndərən bir katibə rast gəldilər. Xoşbəxtlikdən, bu bülletenlər yalnız açar dəyişdirildikdən sonra göndərildi və mesajlar, adətən, kifayət qədər uzun müddət gedir ki, orijinal məlumat bülletenlərini kodlanmış formada öyrənmək üçün açarın kifayət qədər hissələrini bərpa etmək üçün vaxt var. Lakin, onlar hər həftə bülletenin məzmununu açacaq bir şəxsi gizli şəkildə tapa bilmədilər, çünki bütün işçilər Məlumatın Açıqlanmaması Sazişi (MAS) ilə bağlı idi və bu MAS-a uyğun olaraq istənilən korporativ mesajların açıqlanması üçün cəza ölümdür.
Buna baxmayaraq, onlar bu katibi (kiçik bir mükafat qarşılığında) görünüşdə zərərsiz şeylər etməyə inandıra bildilər. Yəni, bülletenin bir nüsxəsini bütün korporasiyaya göndərərkən, ona bəzi mesajların əvvəlində əlavə boşluq simvolu daxil etmək, lakin digər nüsxələri ilkin formada göndərmək tapşırıldı. İndi açarın bərpası sizin üçün sadə bir işdir və bunun üçün bir proqram yazmalısınız. Proqram iki İKMK mesajını alır, burada birinci mesaj N baytdan, ikinci isə N+1 baytdan ibarətdir və eyni açıq mətn mesajının kodlanmasının nəticəsidir, lakin əvvəlində bir əlavə boşluq (onluq dəyəri 32 olan bayt ilə təqdim olunur) ilə. Proqram mesajların kodlanması üçün istifadə olunan açarın ilk N+1 baytını tapmalıdır.
Giriş verilənləri
Giriş məlumatları iki sətirdən ibarətdir. Birinci sətir 2N simvoldan ibarətdir və N baytlı kodlanmış mesajı təmsil edir. İkinci sətir 2N+2 simvoldan ibarətdir və N+1 baytlı kodlanmış mesajı təmsil edir. Burada 1 ≤ N ≤ 10000. Hər bir mesaj bir sətirdə bayt-bayt onaltılıq formada boşluqsuz yazılmışdır. Mesajın hər bir baytı müvafiq baytın onaltılıq dəyərini təmsil edən iki '0'-'9', 'A'-'F' simvolları ilə təqdim olunur.
Giriş məlumatları faylın sonuna qədər davam edir.
Çıxış verilənləri
Çıxış faylına, giriş faylında olduğu kimi onaltılıq formatda bərpa edilmiş açarın N+1 baytını təmsil edən bir sətir yazın.