Score:2

การสร้างคีย์สั้น RSA โดยใช้ OpenSSL

ธง ru

ในการเขียนความท้าทาย CTF ฉันต้องการสร้างคู่คีย์ RSA ขนาด 228 บิตฉันต้องการคีย์ในรูปแบบเดียวกับคีย์ที่สร้างโดย OpenSSL แต่ OpenSSL ไม่รองรับคีย์ยาวน้อยกว่า 512 บิต อะไรจะเป็นทางออก?

Score:2
ธง ng

รูปแบบของคีย์ส่วนตัว RSA อธิบายไว้ใน PKCS#1 V2.2 ภาคผนวก ก.1.2. สามารถบอกให้ OpenSSL ส่งออกคีย์ในรูปแบบนั้นด้วยการจัดรูปแบบ PEM เพื่อให้ข้อมูลผลลัพธ์เป็นข้อความ นั่นเป็นวิธีปฏิบัติสำหรับคีย์ส่วนตัว RSA เมื่อไม่ได้เข้ารหัส

รหัสสำหรับสิ่งนี้ที่ให้มา $(p,q,e)$ เป็นหนึ่งหน้าของ Python (โดยไม่รับประกันความถูกต้อง) ในนี้ ลองออนไลน์!

หนึ่งสามารถ แยกวิเคราะห์ผลลัพธ์ด้วยตัวถอดรหัส ASN.1 JavaScript ของ Lapo Lucini.

ด้วยรหัสส่วนตัวใน ส่วนตัว.pem, OpenSSL สามารถสร้างรหัสสาธารณะได้ด้วย

opensl rsa -in private.pem -outform PEM -pubout -out public.pem

หนึ่งยังสามารถ แยกวิเคราะห์ผลลัพธ์ด้วยตัวถอดรหัส ASN.1 JavaScript ดังกล่าว.

Score:2
ธง in

ในตอนท้ายคุณจะต้องตั้งโปรแกรม ฉันคิดว่านี่คือแอปพลิเคชัน Java ขนาดเล็กที่สร้าง PEM ที่เข้ารหัส RSA PRIVATE KEY (โครงสร้าง PKCS#1 ที่ไม่ได้เข้ารหัส) และ PUBLIC KEY (X.509 SubjectPublicKeyInfo)

เห็นได้ชัดว่ามันสร้างขึ้นบนผู้ให้บริการ Bouncy Castle สำหรับ Java / JCA และ PemWriter จาก API "น้ำหนักเบา" ซึ่งเป็นส่วนหนึ่งของแพ็คเกจผู้ให้บริการ

แพ็คเกจ com.stackexchange.crypto;

นำเข้า java.io.FileWriter;
นำเข้า java.security.KeyPair;
นำเข้า java.security.KeyPairGenerator;
นำเข้า java.security.Security;

นำเข้า org.bouncycastle.asn1.ASN1Object;
นำเข้า org.bouncycastle.asn1.ASN1Sequence;
นำเข้า org.bouncycastle.asn1.pkcs.PrivateKeyInfo;
นำเข้า org.bouncycastle.jce.provider.BouncyCastleProvider;
นำเข้า org.bouncycastle.util.io.pem.PemObject;
นำเข้า org.bouncycastle.util.io.pem.PemWriter;

ShortRsaKeyPair คลาสสาธารณะ {

    โมฆะสาธารณะคงที่ main (String[] args) โยนข้อยกเว้น{
        Security.addProvider (ใหม่ BouncyCastleProvider ()); 
        KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA", "BC");
        kpg.initialize(228);
        KeyPair kp = kpg.generateKeyPair();
        
        PrivateKeyInfo privKeyInfo = PrivateKeyInfo.getInstance(ASN1Sequence.getInstance(kp.getPrivate().getEncoded()));
        ASN1Object pkcs1Object = (ASN1Object) privKeyInfo.parsePrivateKey(); 
        ลอง (PemWriter pemWriter = PemWriter ใหม่ (FileWriter ใหม่ ("privkey.pem"))) {
            pemWriter.writeObject(new PemObject("RSA PRIVATE KEY", pkcs1Object.getEncoded("DER")));
        }
 
        // ไม่จำเป็น คุณสามารถสร้างได้จากคีย์ส่วนตัวโดยใช้ "openssl rsa -pubout"
        ลอง (PemWriter pemWriter = PemWriter ใหม่ (FileWriter ใหม่ ("pubkey.pem"))) {
            pemWriter.writeObject (ใหม่ PemObject ("คีย์สาธารณะ", kp.getPublic().getEncoded()));
        }
    }
}

คุณสามารถตรวจสอบผลลัพธ์โดยใช้:

opensl rsa -pubin -in pubkey.pem -ข้อความ
opensl rsa - ใน privkey.pem - ข้อความ

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา