2 पॉइंट द्वारा GN⁺ 2024-09-08 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • 1991 में पासवर्ड लगाकर संग्रहीत ANC Operation Vula सोर्स कोड ZIP को डिक्रिप्ट कर लिया गया, जिससे दक्षिण अफ्रीका के apartheid शासन के खिलाफ इस्तेमाल हुए गुप्त संचार कोड को सार्वजनिक करना संभव हुआ
  • यह कोड 1980 के दशक के अंत में ANC के दक्षिण अफ्रीका के भीतर भूमिगत नेटवर्क बनाने में इस्तेमाल हुआ था, और 8-bit computers, DTMF tones, acoustic couplers, और PowerBASIC की मदद से one-time pad encrypted messages का आदान-प्रदान किया जाता था
  • शुरुआती PKZIP का ZipCrypto known-plaintext attack के प्रति कमजोर था, और bkcrack से ZIP के भीतर अनुमानित 12-byte plaintext खोजकर key recover की गई
  • हमला ALLBAS.ZIP के uncompressed Store entry, उसके भीतर के ZIP के PK header, और पहली file name COMKEY.BAS का उपयोग करके किया गया, और 23 मिनट बाद 98e0f009 48a0b11a c70f8499 key मिल गई
  • डिक्रिप्ट की गई RANDOM.BAS और TECOD.BAS को DOSBox में compile और run किया गया, जिससे random data generation, file encryption/decryption, RAM disk के उपयोग, और उपयोग के बाद key material नष्ट करने की प्रक्रिया की पुष्टि हुई

Operation Vula का कोड लॉक क्यों रह गया

  • Operation Vula 1980 के दशक के अंत में ANC नेतृत्व और सामग्री को दक्षिण अफ्रीका के भीतर पहुँचाने और घरेलू कार्यकर्ताओं को जोड़ने के लिए भूमिगत नेटवर्क बनाने का अभियान था
  • सुरक्षित संचार के लिए 8-bit computers, DTMF tones, acoustic couplers, कई उपकरणों, और PowerBASIC programs की मदद से one-time pad encrypted messages का आदान-प्रदान किया जाता था
  • क्रिप्टो सिस्टम मुख्य रूप से बनाने वाले Tim Jenkin ने मूल कोड Vulacode GitHub पर सार्वजनिक कर दिया था, और विस्तृत विवरण Talking To Vula.pdf में है
  • कोड के सार्वजनिक होने में सीधे देरी की वजह 1991 में बनाई गई password-protected ZIP file थी
    • Tim Jenkin ने UK छोड़कर दक्षिण अफ्रीका लौटते समय पूरे source code को ZIP में पैक कर password सेट किया था
    • बाद में दक्षिण अफ्रीका में कोड खोलने की ज़रूरत नहीं पड़ी, और कुछ साल बाद दोबारा खोलने की कोशिश करने पर उन्हें password याद नहीं रहा
    • एक accessible file बहुत शुरुआती version की थी, जबकि बाकी files password की वजह से extract नहीं हो पा रही थीं

पुरानी PKZIP files और known-plaintext attack

  • प्राप्त files ALLBAS.ZIP और CODMAY93.ZIP थीं, और दोनों शुरुआती PKZIP से बनाई गई password-protected files थीं
  • उस समय ZIP format के ZipCrypto पर known-plaintext attack उपलब्ध था, और open source implementation bkcrack इस्तेमाल की जा सकती थी
  • इस attack के लिए ZIP file के भीतर किसी ज्ञात location पर मौजूद 12-byte plaintext का अनुमान ज़रूरी था
  • ALLBAS.ZIP में कई .BAS, .INC, .ZIP, .EXE files थीं, और कुछ entries का compression method Store था
    • Store entries वे files थीं जो पहले से binary होने के कारण compress नहीं की गई थीं, इसलिए compressed output मिलाने की ज़रूरत के बिना plaintext का अनुमान लगाया जा सकता था
    • ZIP files खुद भी Store entry के रूप में मौजूद थीं, और ZIP file की शुरुआत में PK header होने से वे plaintext candidate के लिए उपयुक्त थीं

plaintext candidate ढूँढना: inner ZIP की पहली file name

  • attack का target ALLBAS.ZIP के भीतर मौजूद inner ZIP file OLDCOD.ZIP थी
  • ZIP file की शुरुआत के PK header में file name length और extra field length जैसी जानकारी होती है, इसलिए अगर पहली file name पता हो तो attack के लिए ज़रूरी plaintext बनाया जा सकता था
  • अगर file name कम से कम 8 characters का हो, तो .BAS, .INC जैसे extension के साथ file name size और extra field length bytes जोड़कर ज़रूरी 12 bytes मिल सकते थे
  • सबसे खराब स्थिति में uppercase letters और digits के संयोजन से अधिकतम 8 characters और extension वाले file name को brute-force किया जा सकता था, लेकिन वास्तव में इसकी ज़रूरत नहीं पड़ी
  • Tim Jenkin के पास OLDCOD.ZIP का दूसरा version था, और वे बता सके कि उसके भीतर पहली file COMKEY.BAS थी

bkcrack से key recovery

  • COMKEY.BAS को plaintext candidate के रूप में देने के लिए एक साधारण Perl program लिखा गया, और bkcrack -C ALLBAS.ZIP -c OLDCOD.ZIP -p ... -o 26 -j 8 के रूप में attack चलाया गया
  • 23 मिनट बाद bkcrack ने यह key खोजी
    • 98e0f009 48a0b11a c70f8499
  • उसी key से ALLBAS.ZIP को डिक्रिप्ट कर ALLBAS-DECRYPTED.ZIP बनाया गया, और वही key CODMAY93.ZIP पर भी काम कर गई, जिससे CODMAY93-DECRYPTED.ZIP तैयार हुआ
  • वैकल्पिक रूप से अन्य inner ZIP files पर भी यही तरीका आजमाया जा सकता था, और असफल होने पर file name brute-force किया जा सकता था
  • बाद में जाँचे गए TECOD5.BAS candidate ने वही key सिर्फ 38 सेकंड में खोज ली, जिससे पता चला कि सही plaintext selection attack की speed पर बड़ा असर डालता है

डिक्रिप्ट किए गए कोड को चलाना

  • दोनों programs को DOSBox में PowerBASIC से compile करके चलाया गया
    • RANDOM.BAS: one-time pad के लिए random number disk बनाने में इस्तेमाल होता था
    • TECOD.BAS: email से भेजे जाने वाले messages को encrypt और decrypt करने में इस्तेमाल होता था
    • compiled code और generated executables jgc-vula-september-2024 में उपलब्ध हैं
  • इसे PowerBASIC Compiler Version 3.00b से compile किया गया था; TECOD.BAS में 2,575 statements और 2,329 lines थीं, जबकि RANDOM.BAS में 2,194 statements और 1,940 lines थीं
  • RANDOM.EXE random data generation के लिए तीन प्रकार के pseudo-random generation algorithms का उपयोग करता था, जिनमें से एक user द्वारा सीधे दिए गए random key पर आधारित था
  • TECOD.EXE password-protected था, और इस version में embedded password TIMBOBIMBO था, जिसे code में characters के क्रम को बिखेरकर रखा गया था
    • Tim Jenkin ने इस password को साधारण लेकिन obfuscated रूप में program के भीतर रखा था
    • ANC के अलग-अलग सदस्यों को दिए गए program versions में password अलग-अलग थे
  • इसे खुद चलाने वालों के लिए manual TECOD_HLP.pdf में है

उस समय के operational workflow से सामने आए विवरण

  • उदाहरण run में RANDOM.EXE से key के लिए random data RANDATA.1 में बनाया जाता था, फिर PLAIN.TXT को encrypt करके PLAIN.BIN बनाया जाता था, और बाद में वापस restore किया जाता था
  • सभी cryptographic operations को RAM disk पर चलाने के लिए design किया गया था
  • encryption example में program files TECOD.EXE और TECOD.CNF A: floppy disk पर होती थीं, key files वाली data disk B: पर, और RAM disk R: पर होती थी
  • encryption चरण में RANDATA.1 file name को SNUM में बदलना पड़ता था, जबकि decryption चरण में B: पर मौजूद RANDATA.1 का नाम RNUM होना चाहिए था
  • program में उपयोग के बाद key material नष्ट करने की प्रक्रिया, generated random bytes के distribution की जाँच, और RAM disk के उपयोग पर विशेष जोर शामिल था

1 टिप्पणियां

 
GN⁺ 2024-09-08
Hacker News टिप्पणियां
  • Vula में दिलचस्प बात यह थी कि सिस्टम की usability की कमी ही आखिरकार उसके पतन का कारण बनी
    आज़ादी के लिए एक हत्यारी शासन-व्यवस्था के खिलाफ लड़ने वाले बेहद समर्पित activists भी सिस्टम को ठीक से इस्तेमाल नहीं कर पाए
    दस्तावेज़ बिना encrypt किए छोड़ दिए गए, keys आसानी से मिल सकती थीं, और software इतना झंझट भरा था कि कुछ महत्वपूर्ण communications plaintext में भेजे गए
    हम सब जानते हैं कि PGP को सेट अप करना और सही तरीके से इस्तेमाल करना कितना सिरदर्द है, और आखिरकार security ही usability है
    Vula के बारे में थोड़ा और लिखा हुआ: https://shkspr.mobi/blog/2014/01/the-hardest-problem-in-encr...

    • कल्पना कीजिए कि अगर घर की चाबी खो जाए तो आप फिर कभी घर में घुस ही नहीं सकते
      usability ज़्यादातर मामलों में security घटाने की दिशा में काम करती है
  • सुरक्षा के लिए one-time pad के random number generator को देखा, Melissa O'Neil को यह पसंद आता। यह लगभग PCG जैसा है
    PowerBASIC सिस्टम Rand linear congruential generator (LCG) का उपयोग करके नए rand1-3 function set में से एक चुनता है, और उनमें से दो अलग-अलग LCG का उपयोग करते हैं
    https://github.com/Vulacode/RANDOM/blob/d6a1a1d694b22e6a115b...

    • वह one-time pad generation method काफी खराब लगती है। अलग-अलग generators की seed state recover करना पर्याप्त रूप से संभव लगता है, और LCG को reverse-engineer करना बहुत आसान है
      ऐसा लगता है कि pseudorandom generators को system random generator से seed किया जाता है, इसलिए अंत में system LCG का initial seed recover कर लेने भर से one-time pad को reverse-engineer किया जा सकता है
      system LCG का seed size नहीं पता, लेकिन अगर यह 32-bit है, तो seed state को बस brute force करके और result पर entropy analysis चलाकर शायद एक घंटे के अंदर तोड़ा जा सकता है
    • यह बात भी है कि original programmer ने cryptography और BASIC को चलते-चलते सीखते हुए इसे लिखा था
      “अपना खुद का cipher मत बनाओ” पहला नियम है, लेकिन 80 के दशक के आखिर में किसी शानदार नई technology से काम करते समय यह अपवाद जैसा लगा होगा
    • असली one-time pad के तौर पर इस्तेमाल करने के लिए यह जाहिर तौर पर बिल्कुल नाकाफी है
  • South Africa में apartheid के पतन की पूरी कहानी काफी दिलचस्प है। इस पहलू के बारे में मुझे लगभग कुछ पता नहीं था
    मज़ेदार तथ्य यह है कि BDS movement (boycott, divestment, sanctions) यहीं से शुरू हुआ था, और उस समय कई लोगों को लगता था कि apartheid कभी खत्म नहीं होगा
    लेकिन लंबे समय तक कई pressure points पर लगातार दबाव डालने से बड़ा stress बना, और वही इसके पतन की वजह बना
    यह काम Toshiba T-100 पर किया गया था, यह भी काफी दिलचस्प है, और वह शानदार computer है

  • दिलचस्प। South Africa ने सचमुच बहुत कुछ झेला है। उम्मीद है कि आज का GNU doomsday clock को पीछे ले जाएगा
    सुझाई गई चीज़ है Action Kommandant. इसमें शहीद और Bonteheuwel के गौरव Ashley Kriel के जीवन की झलक मिलती है

    • Ashley Kriel का नाम जानकर अच्छा लगा। ANC के साथ रहे प्रतिभाशाली साथियों के जीवन और उनकी अलग-अलग प्रतिभाएं अक्सर ओझल हो जाती हैं, इसलिए ऐसे लोगों के बारे में जानने में मेरी दिलचस्पी रही है
      secondary school की English class में मुझे Athol Fugard के बारे में एक radical teacher से पता चला, जो 80 के दशक की surveillance से बचकर South Africa से Canada चले गए थे, और इससे मेरा नज़रिया खुला
      South Africans को भी शुभकामनाएं। इतने प्रतिभाशाली लोगों और प्राकृतिक संपदा वाले देश को कहीं बेहतर व्यवहार मिलना चाहिए। कम से कम ANC के भीतर कठोर राजनीति का दौर खत्म होता दिख रहा है
  • brute force के लिए Rust code: https://github.com/rhulha/ZipMcKracken

  • Operation Vula, 8-bit computers, DTMF tones, acoustic couplers—दिलचस्प
    CIA/NSA को भनक लग गई थी कि Operation Vula built-in DES वाले commercial Philips PX-1000 पर चलाया जा रहा है, और उन्होंने Philips को रिश्वत देकर product में backdoor लगवा दिया: https://www.cryptomuseum.com/crypto/philips/px1000/

    • Tim Jenkins ने अपना खुद का system और अपना खुद का cipher इस्तेमाल करके उस समस्या को bypass किया
      backdoored DES के बजाय, उन्होंने one-time pad इस्तेमाल किया जिसे flight crew floppy के जरिए हर party तक ले जाते थे
      South Africa में ऐसी कोई floppy पकड़ी भी जाती तो सिर्फ उस receiver के messages expose होते, और आखिरकार जल्द ही इसका पता चल सकता था
    • commercial encryption technology में से कुछ भी इस्तेमाल करें तो आमतौर पर समझिए खेल खत्म
      लेकिन one-time pad की keys को pseudorandom generator से बनाना naive तरीका है
      one-time pad का मुख्य बिंदु सचमुच random key इस्तेमाल करके असली security पाना है। यहां इस्तेमाल की गई किस्म की key के लिए तो सिर्फ seed exchange करके उसे locally बनाया जा सकता था, और ऐसा होता तो flight crew को जोखिम में डालने की जरूरत नहीं पड़ती
      समझ आता है कि developer self-taught था और वह भी काम करते-करते सीख रहा था, लेकिन जो लोग सचमुच अहम secrets संभाल रहे हों, उन्हें ऐसी गलती नहीं करनी चाहिए
      हालांकि बड़ी मात्रा में सचमुच random data बनाना भी आसान नहीं है। अंततः आपको अपना hardware device बनाना पड़ेगा, क्योंकि commercial equipment के साथ छेड़छाड़ होने की संभावना बहुत अधिक है
  • अगर आपको “पुराना” ZIP password तोड़ना है और archive के अंदर कुछ अक्षर पता हैं, तो इससे बेहतर कुछ नहीं: https://github.com/kimci86/bkcrack

    • क्या पूरा लेख उसी program के बारे में नहीं है?