Điểm:2

Tạo khóa ngắn RSA bằng OpenSSL

lá cờ ru

Để viết thử thách CTF, tôi muốn tạo một cặp khóa RSA có kích thước 228-bit.Tôi muốn các khóa có cùng định dạng với các khóa do OpenSSL tạo. Tuy nhiên, OpenSSL không hỗ trợ các khóa dài dưới 512 bit. Điều gì có thể là một giải pháp?

Điểm:2
lá cờ in

Cuối cùng, tôi cho rằng bạn sẽ phải lập trình nó, đây là một ứng dụng Java nhỏ tạo KHÓA RSA RSA được mã hóa PEM (cấu trúc PKCS#1 không được mã hóa) và KHÓA CÔNG CỘNG (X.509 SubjectPublicKeyInfo).

Rõ ràng nó được xây dựng dựa trên nhà cung cấp Bouncy Castle cho Java/JCA và PemWriter từ API "nhẹ" là một phần của gói nhà cung cấp.

gói com.stackexchange.crypto;

nhập java.io.FileWriter;
nhập java.security.KeyPair;
nhập java.security.KeyPairGenerator;
nhập java.security.Security;

nhập org.bouncycastle.asn1.ASN1Object;
nhập org.bouncycastle.asn1.ASN1Sequence;
nhập org.bouncycastle.asn1.pkcs.PrivateKeyInfo;
nhập org.bouncycastle.jce.provider.BouncyCastleProvider;
nhập org.bouncycastle.util.io.pem.PemObject;
nhập org.bouncycastle.util.io.pem.PemWriter;

lớp công khai ShortRsaKeyPair {

    public static void main(String[] args) throws Exception{
        Security.addProvider(mới 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(); 
        thử (PemWriter pemWriter = new PemWriter(new FileWriter("privkey.pem"))) {
            pemWriter.writeObject(new PemObject("RSA PRIVATE KEY", pkcs1Object.getEncoded("DER")));
        }
 
        // không cần thiết, bạn cũng có thể tạo nó từ khóa riêng bằng cách sử dụng "openssl rsa -pubout"
        thử (PemWriter pemWriter = new PemWriter(new FileWriter("pubkey.pem"))) {
            pemWriter.writeObject(new PemObject("PUBLIC KEY", kp.getPublic().getEncoded()));
        }
    }
}

Bạn có thể kiểm tra kết quả bằng cách sử dụng:

openssl rsa -pubin -in pubkey.pem -text
openssl rsa -in privkey.pem -text
Điểm:2
lá cờ ng

Định dạng của khóa riêng RSA được mô tả trong PKCS#1 V2.2 phụ lục A.1.2. OpenSSL có thể được yêu cầu xuất một khóa ở định dạng đó với định dạng PEM trên đó, để dữ liệu kết quả là văn bản; đó là thông lệ đối với khóa riêng RSA khi không được mã hóa.

Mã cho điều này được đưa ra $(p,q,e)$ là một trang của Python (không đảm bảo tính chính xác) trong phần này Hãy dùng thử trực tuyến!

Người ta có thể phân tích kết quả bằng bộ giải mã JavaScript ASN.1 của Lapo Luchini.

Với khóa riêng trong riêng tư.pem, OpenSSL có thể tạo khóa chung với

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

Người ta cũng có thể phân tích cú pháp kết quả bằng bộ giải mã JavaScript ASN.1 đã nói.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.