OpenPGP bo'yicha qilingan expirementlar.
Hamma narsa juda explicit qilingan misol keltiraman, aytaylik manga ed25519 key kerak va manashunday key generation qilmoqchiman.
Ho'sh public va private keylar shakli qanday bo'ladi masalan publickey
0x04 - Bu versiya bizda xozir V4
<4 bytes> - Unix time yani qachon yasalgani
0x16 - Qaysi algorithmda ekani bizni holatda EdDSA
<10 bytes> - Object Identifier ASN.1 standarti bo'yicha. Masalan bizni holatdagi raqam
1.3.6.1.4.1.11591.15.1 Aynana manashunaqa formatda bo'ladi.
0x01 0x07 0x40 - Bular section esa MPI: Bu encoding format for number
<32 bytes> - Ed25519 public key content
Ko'rib turdangingizdek bu yerda juda tushunarsiz infolar ko'p, MPI nima ? OID nima va nega kerak?
Agar RFC ga mos qilmasangiz unda siz qilgan narsa sizni muhitdan tashqarida ishlamaydi. Masalan publickey manashu normalarga mos kelmasa uni boshqa pgp key bilan ishlaydigan dasturlar masalan
gnugpg tushunmaydi.
Bu faqat rfc haqida edi. Endi texnik tomondan qaraymiz.
Masalan siz foydalanadigan tilda bularni qilsangiz qanday ishlaydi ?
Bu umumiy manoda yani tezlikdan tortib xavfsizlikgacha. Mani holatimda nativ haskellda yetarlicha tez ishlayabti key generation ammo xavfizlik qanday bilmayman.
Ammo encyption/decryption unday emas yetarlicha sekin ishlaydi )) Streamingsiz holatda 11-12minutes for ~50mb file encryption.
Streaming bilan ~3s Ammo buyoqda ham gambling qilganman yani bazi parametrlarni o'zgartirib ko'rdim va chunklarni 32kb dan oldim.
Aytishingiz mumkin 3s norm. Ha norm bo'lishi mumkin ammo rfcga mos degani muammo hal bo'ldi degani emas. Yani man buni qanday test qilishni bilmayman. Ishlayabtimi ? Ha ishlayabti )) Ha bazi componentlarni test qila olarman va biroz hotirjam bo'larman aytaylik SHA1 o'rniga SHA-512 ishlatdim. RFC bo'yicha hamma narsaga mos keladi.
Ammo asosiy savol ochiqligicha qolaveradi. Yani qanchalik xavfsiz va qanchalik tog'ri ?
Manashu yerda yo'l ikkiga ajralyabti.
1. For fun.
2. Professional.
Man professional kriptogrof emasman. Shunchaki RFC dagi aytilgan gaplar bo'yicha bazi liblar bilan expirement qilgan odaman holos. Ha dasturlashni bilaman ammo specialis emasman bu domainda. Ha bu narsani qandaydir darajada qildim, albatta full emas rfc bir qismi holos. Ammo prikol shundaki bu narsaga garantiya berolmayman.
Agar parser yozsam eng kamida visual bilishim mumkin va input/output ni test qila olaman. Ammo kriptografiyada doyim ham unday emas ekan. Yani biror narsa xato ekanini qanday isbotlashni ham bilmayman ammo tog'ri emas deb o'tiraverishim mumkin.
Ha albatta study qilish mumkin, bu borada doyim tolerantman. Ammo bunga sarflanadigan resurs, vaqt... Aynan bunaqa mavzularda tajribaga ega odamlardan feedback olish.
Shunda ham hamma narsani to'liq 0 dan emas balki uje tayyor librarylarni ishlatgan holatda qildim.
Ushbu expirement quyidagi hulosalarga olib keldi.
1. Bazi narsalarda shunchaki havaskor bo'lish ham unchalik oson emas. Masalan kriptografiya.
2. Nimadirni high levelda tushungan bilan uni implement qilish o'rtasida juda katta farq bor. Tushungan odam faqat o'zini tushunaman deb o'ylaydi ko'p holda aslida unaqa bo'lmaydi....
3. Detaillarga kirganda sizdagi tajriba va bilim aniq ko'rinadi. Masalan bit manipulationdan tajribam juda kamligi sabab doyim adashtirib o'tirdim kerakli combinatorlarni tiplarda juda ko'p adashdim bazi joylarda unsignet integer kerak bo'lsa man signed bazi joylarda esa bytestring o'rniga unsignet integer va ularni ortiqcha convertatsiyalari. Nu baxtimga haskellda kriptografiyaga aloqador juda ko'p source bor.
Bu narsa man uchun shunchalik katta puzzle bo'ldiki xatto nimani qayerdan ham boshlashni bilmagan edim. Boshida shunchaki
Ammo muammoni hal etishga ham compramise topa oldim. Yani 2ta source of truth bu yerda manga kerkali encryption/decryption algorithmlar uje tayyor testdan ham o'tgan:
https://github.com/simplex-chat/simplexmqhttps://github.com/fission-codes/fission