Puncte:2

Generarea de chei scurte RSA folosind OpenSSL

drapel ru

Pentru a scrie o provocare CTF, vreau să creez o pereche de chei RSA cu dimensiunea de 228 de biți.Vreau cheile exact în același format ca cheile generate de OpenSSL. Dar, OpenSSL nu acceptă chei lungi mai puțin de 512 biți. Care ar putea fi o soluție?

Puncte:2
drapel in

În cele din urmă, va trebui să o programați, presupun, iată o mică aplicație Java care creează o CHEIE PRIVATĂ RSA codificată PEM (structură PKCS#1 necriptată) și CHEIE PUBLICĂ (X.509 SubjectPublicKeyInfo).

Evident, este construit pe partea de sus a furnizorului Bouncy Castle pentru Java / JCA și PemWriter din API-ul „ușor” care face parte din pachetul furnizorului.

pachet com.stackexchange.crypto;

import java.io.FileWriter;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.Security;

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

clasă publică ShortRsaKeyPair {

    public static void main(String[] args) aruncă excepție{
        Security.addProvider(nou 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(); 
        încercați (PemWriter pemWriter = nou PemWriter(nou FileWriter ("privkey.pem"))) {
            pemWriter.writeObject(new PemObject("RSA PRIVATE KEY", pkcs1Object.getEncoded("DER")));
        }
 
        // nu este necesar, îl puteți genera și din cheia privată folosind „openssl rsa -pubout”
        încercați (PemWriter pemWriter = nou PemWriter(nou FileWriter("pubkey.pem"))) {
            pemWriter.writeObject(new PemObject("CHEIE PUBLICA", kp.getPublic().getEncoded()));
        }
    }
}

Puteți verifica rezultatul folosind:

openssl rsa -pubin -in pubkey.pem -text
openssl rsa -in privkey.pem -text
Puncte:2
drapel ng

Formatul cheilor private RSA este descris în PKCS#1 V2.2 anexa A.1.2. OpenSSL i se poate spune să scoată o cheie în acel format cu formatare PEM peste aceasta, astfel încât datele rezultate să fie text; aceasta este practică pentru cheile private RSA atunci când nu sunt criptate.

Codul pentru aceasta este dat $(p,q,e)$ este o pagină de Python (fără nicio asigurare a corectitudinii) în aceasta Încearcă online!

Se poate analizați rezultatul cu decodorul JavaScript ASN.1 al lui Lapo Luchini.

Cu cheia privată introdusă privat.pem, OpenSSL poate genera cheia publică cu

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

Se poate de asemenea analizați rezultatul cu decodorul JavaScript ASN.1 menționat.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.