¿qué formato es la clave pública bouncycastle opengpg?

0

Estoy usando bouncycastle para acceder a mis claves públicas en gpg. Actualmente la clave pública, cuando se lee en base64 me da esto:

    mQENBFh1kBcBCADMUkNW2qFgeRnornjhT3lt73wTGcO9rt+Ktr1tcopmOPTfNq3
    feZNFHRUsBt0Nnuj9+vSD2cwFRoZDNulhnBD8lAJYOD427uvV+KBDF/5pCQKh2S
    mDK8tJI/ncLIlX4SFa8F9f36FySglpkzA59IFtHdUBz9w+PJRqUQ5MVRzNHYBbv
    6aeIWwl46KrL3eibRgBDVuEOKAoesdb+xErs9cqg3KSVi01XBgr+XMSgOBz4J3f
    J4HdibsJdz1+113aKT++4LUSuuyeVbw3K/ZgMkrsyeJw84sHhF2kDu61atSUsQE
    nJwBF2sPA9V/i28fftxodgg5qbEs8egdsw/wxGzsfABEBAAG0K0NocmlzIFpoZW
    5nIChjemhlbmcpIDxjemhlbmdAYXRsYXNzaWFuLmNvbT6JATkEEwEIACMFAlh1k
    BcCGwMHCwkIBwMCAQYVCAIJCgsEFgIDAQIeAQIXgAAKCRARY82BslwTrMvtB/4t
    LoRH91p09vM1sSQ77RC+XwQqhhvN1BAeqGxqZpgCO6Ld5KRh8f4mFY8nXjDCSyy
    ydTBzIUp6aG0f+2EBhArtk/oU/pi8D4zHoeBkrl23/234s1kBI5F2g2kd6itwP8
    ekimaUyNFdPIN1dPwdxhuspOUtFNR+HsT3BT32v4Afd7sWVNTFrkapxTdxxZkVb
    +FS0wbuzFzB2gb8AvEGevzF/hQXOf3r8QzUQoEZ14pigNu/arlXzEuzXJXXT/AQ
    nAzbVENoFrhojxqEU7RxH8J4nao8OfpYfL7w3T7PC3nFFSTYSwvYItGkl9DPPiZ
    GWZTrb6VfpFGNLHwCoLOaf8ShsAIAAA==

Pensé que esta debería ser una clave RSA de 4096 de longitud, pero es la longitud incorrecta. Lo que realmente quiero hacer es usar esta clave pública para verificar una firma. ¿Alguien podría ayudar a arrojar algo de luz sobre qué formato es este?

    
pregunta zcaudate 05.02.2017 - 06:31
fuente

1 respuesta

2

Esta es la base64 (pero no la 'armadura' completa) de un bloque de clave pública en OpenPGP ( rfc4880 et pred) Formato utilizado por GPG. Aparte: no hay tal cosa como opengpg; PGP fue el software original de Phil Zimmerman y la compañía a la que se lo entregó, OpenPGP es el estándar, y GNU Privacy Guard, alias GnuPG, también conocido como GPG, implementa ese estándar, al igual que BouncyCastle.

Los bloques de clave OpenPGP y, por lo tanto, GPG incluyen mucho más que solo la clave criptográfica en bruto; en particular, las claves públicas (incluida esta) casi siempre se adjuntan a una ID de usuario y llevan una o más firmas, al menos una "autofirma" por la clave o su principal, y con frecuencia las firmas de otros usuarios (de confianza) Para formar la 'web de confianza'. Consulte 11.1 en el RFC vinculado para obtener una descripción general.

Después de convertir este base64 a binario, gpg --list-packets lo decodifica como:

:public key packet:
        version 4, algo 1, created 1484099607, expires 0
        pkey[0]: [2048 bits]
        pkey[1]: [17 bits]
        keyid: 1163CD81B25C13AC
:user ID packet: "Chris Zheng (czheng) <[email protected]>"
:signature packet: algo 1, keyid 1163CD81B25C13AC
        version 4, created 1484099607, md5len 0, sigclass 0x13
        digest algo 8, begin of digest cb ed
        hashed subpkt 2 len 4 (sig created 2017-01-11)
        hashed subpkt 27 len 1 (key flags: 03)
        hashed subpkt 11 len 6 (pref-sym-algos: 9 8 7 3 2 1)
        hashed subpkt 21 len 5 (pref-hash-algos: 8 2 9 10 11)
        hashed subpkt 22 len 3 (pref-zip-algos: 2 3 1)
        hashed subpkt 30 len 1 (features: 01)
        hashed subpkt 23 len 1 (key server preferences: 80)
        subpkt 16 len 8 (issuer key ID 1163CD81B25C13AC)
        data: [2046 bits]
:trust packet: flag=00 sigcache=00

Como puede ver, es una clave RSA de 2048 bits, no de 4096 bits. El algo en un paquete de clave de pub o un paquete de firma es la codificación de OpenPGP de un algoritmo de clave de pub y 1 es RSA, consulte la sección 9.1.

No estoy seguro de que saber el formato te ayude a verificar una firma, pero eso es lo que pediste.

    
respondido por el dave_thompson_085 05.02.2017 - 08:15
fuente

Lea otras preguntas en las etiquetas