decripta un messaggio soap usando openssl

1

Ho provato a fare lo stesso trovato in Come decifrare manualmente un messaggio SOAP usando openssl?

Sfortunatamente senza successo ...  Ecco la mia situazione: Sto provando a fare le stesse cose solo i miei dati sono leggermente diversi:

 <xenc:EncryptedKey xmlns:xenc="http://www.w3.org/2001/04/xmlenc#" Id="EK-a976c8a8-a6b7-4225-b6fc-e42390c62e5f">    
      <xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p"/>    
      <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">    
        <wsse:SecurityTokenReference xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">    
          <wsse:KeyIdentifier EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509SubjectKeyIdentifier">mtqvpfcMviptZakL3P7rflMzR3g=</wsse:KeyIdentifier>    
        </wsse:SecurityTokenReference>    
      </ds:KeyInfo>    
      <xenc:CipherData>    
        <xenc:CipherValue>YUv9YKmNg[...]2kyMZei4oYw=</xenc:CipherValue>    
      </xenc:CipherData>    
    </xenc:EncryptedKey>    
    <xenc:ReferenceList xmlns:xenc="http://www.w3.org/2001/04/xmlenc#">    
      <xenc:DataReference URI="#ED-7d85b663-7237-47f0-9637-0a2496cd8bb6"/>    
    </xenc:ReferenceList>    
    <xenc:EncryptedData xmlns:xenc="http://www.w3.org/2001/04/xmlenc#" Id="ED-7d85b663-7237-47f0-9637-0a2496cd8bb6" Type="http://www.w3.org/2001/04/xmlenc#Element">    
      <xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes256-cbc"/>    
      <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">    
        <wsse:SecurityTokenReference xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsse11="http://docs.oasis-open.org/wss/oasis-wss-wssecurity-secext-1.1.xsd" wsse11:TokenType="http://docs.oasis-open.org/wss/oasis-wss-soap-message-security-1.1#EncryptedKey">    
          <wsse:Reference URI="#EK-a976c8a8-a6b7-4225-b6fc-e42390c62e5f"/>    
        </wsse:SecurityTokenReference>    
      </ds:KeyInfo>    
      <xenc:CipherData>    
        <xenc:CipherValue>1LzEGX0lc[...]tDFbIa0lXQ==</xenc:CipherValue>    
      </xenc:CipherData>    
    </xenc:EncryptedData>

Questo fa parte di una busta di sapone inviata da un WebService client a un SecurityTokenService. Mi aspetto che contenga un nome utenteToken ma vorrei essere sicuro e controllare la struttura dei dati cifrati.

Prima di tutto ero curioso di vedere quale fosse il valore di "mtqvpfcMviptZakL3P7rflMzR3g=" in EncryptedKey / SecurityTokenReference / KeyIdentifier Così ho provato a seguire la stessa procedura di @BazzaDP (nel post di riferimento):

  1. decodifica di base64 in un file

    echo "mtqvpfcMviptZakL3P7rflMzR3g=" | base64 -d -i > subjectKeyIdentifier.decoded

  2. decifrare i dati con la chiave privata del STS:

    openssl rsautl -decrypt -in subjectKeyIdentifier.decoded -out subjectKeyIdentifier.decrypted  -inkey ../idpsts-pK.pem
    Enter pass phrase for ../idpsts-pK.pem:
    RSA operation error
    140242236282536:error:0407106B:rsa routines:RSA_padding_check_PKCS1_type_2:block type is not 02:rsa_pk1.c:190:
    140242236282536:error:04065072:rsa routines:RSA_EAY_PRIVATE_DECRYPT:padding check failed:rsa_eay.c:616:
    
  3. considerando il. Ho provato ad aggiungere il parametro pad -oaep senza successo

    openssl rsautl -decrypt -in subjectKeyIdentifier.decoded -out subjectKeyIdentifier.decrypted -oaep -inkey ../idpsts-pK.pem
    
    
    Enter pass phrase for ../idpsts-pK.pem:
    
    RSA operation error
    140724669945512:error:0407A079:rsa routines:RSA_padding_check_PKCS1_OAEP:oaep decoding error:rsa_oaep.c:181:
    140724669945512:error:04065072:rsa routines:RSA_EAY_PRIVATE_DECRYPT:padding check failed:rsa_eay.c:616:
    

Rinuncia Ho provato a decodificare almeno EncryptedData / CipherData / CipherValue usando lo stesso procdure di @BazzaDP ma non ha funzionato neanche.

Qualcuno sa cosa sto facendo male? Grazie

=========== EDIT: Dave Explains Il lavoro superiore è inutile: provare a decodificare un hash =======

Ho generato alcuni nuovi scambi di dati con alcuni certificati falsi, in modo da poter scambiare tutti i miei contenuti per scopi di pulizia.

È lei quello che ho fatto. In realtà è lo stesso di BazzaDP nell'altro post. Solo per decifrare il SessionKey ho aggiunto il "-oaep" 'padding' al comando openssl. Tuttavia non riesco a superare il processo ...

  1. Base64 decodifica della chiave di sessione:
echo "Pfk3yVFoiGnO9DEWQzuDmB32dnZ1xSyVQnl9NK6I/Vfj5zhiEjFA1uHYFKrJr8w+BjLjtUg7q7mUzctycIdXZ/RNtegLa4tyIKouoyWp5zJaZuEbfqwCbjy0QDEjYto8RJmC3rjlhHPjYt1nY6f6OBdkXoa0P1kkAKMrwp2tAHw=" | base64 -i -d > key/key.bin
  1. decrittografia della sessionkey:
openssl rsautl -decrypt -in key/key.bin -out key/key.dec -aoep -inkey idpsts-pK.pem
  1. Base64 decodifica dei dati:
echo "rnUUUmey/lFhxHHRJhVeJCrS3J3UPz12fZ7+selkTdVwYSjcZK+kIUFhypuWx4W900LBGuwQPVI8g/EwsXcUzb7wfMkYjx6dcQt0wmLJGbFs+wERjCR78qgVF0RB10SKZvmKT1Q5mM+9fJZU+o9tTkwdxvDkjio9I6GnqmoqPy62fl1J7GjqGlRiqSkJx/k+ERlCrJUcMCc0KplBHJXnyhaE90hHDXr1JL4o6+o0klmStW87aurpzuewK9VB6RhWU8grKrNunUvS9H5dxWyGSfHW0/fIth4v/hRwg0vWfFNcGYXBSzYaKd+fNmWfj4/pCDuuVQpn6i9zGe8kcNtNx2AG0MUGPUarn1WabQJyRy0d6/va2aySKjo2l8keluPKf6iS1rzD1s1wVGQi2PrRuA==" | base64 -d -i > data/data.enc
  1. Ottenimento della chiave di sessione in formato esadecimale:
xxd -p key/key.dec 
a8abcd783445c8db00d1ae8332439930ff1875700bec098fa3493439edad114a
  1. Ottenere i dati come esadecimali per estrarre i primi 16 bit come IV:
hexdump -C data/data.enc 
00000000  ae 75 14 52 67 b2 fe 51  61 c4 71 d1 26 15 5e 24  |.u.Rg..Qa.q.&.^$|
00000010  2a d2 dc 9d d4 3f 3d 76  7d 9e fe b1 e9 64 4d d5  |*....?=v}....dM.|
00000020  70 61 28 dc 64 af a4 21  41 61 ca 9b 96 c7 85 bd  |pa(.d..!Aa......|
00000030  d3 42 c1 1a ec 10 3d 52  3c 83 f1 30 b1 77 14 cd  |.B....=R|
00000090  11 19 42 ac 95 1c 30 27  34 2a 99 41 1c 95 e7 ca  |..B...0'4*.A....|
000000a0  16 84 f7 48 47 0d 7a f5  24 be 28 eb ea 34 92 59  |...HG.z.$.(..4.Y|
000000b0  92 b5 6f 3b 6a ea e9 ce  e7 b0 2b d5 41 e9 18 56  |..o;j.....+.A..V|
000000c0  53 c8 2b 2a b3 6e 9d 4b  d2 f4 7e 5d c5 6c 86 49  |S.+*.n.K..~].l.I|
000000d0  f1 d6 d3 f7 c8 b6 1e 2f  fe 14 70 83 4b d6 7c 53  |......./..p.K.|S|
000000e0  5c 19 85 c1 4b 36 1a 29  df 9f 36 65 9f 8f 8f e9  |\...K6.)..6e....|
000000f0  08 3b ae 55 0a 67 ea 2f  73 19 ef 24 70 db 4d c7  |.;.U.g./s..$p.M.|
00000100  60 06 d0 c5 06 3d 46 ab  9f 55 9a 6d 02 72 47 2d  |'....=F..U.m.rG-|
00000110  1d eb fb da d9 ac 92 2a  3a 36 97 c9 1e 96 e3 ca  |.......*:6......|
00000120  7f a8 92 d6 bc c3 d6 cd  70 54 64 22 d8 fa d1 b8  |........pTd"....|
00000130
  1. Il tentativo non riuscito di decifrare i dati:
openssl enc -d -aes-256-cbc -in data/data.enc -K a8abcd783445c8db00d1ae8332439930ff1875700bec098fa3493439edad114a -iv ae75145267b2fe51 -out data/data.dec
bad decrypt
140050628507304:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:evp_enc.c:546:

La chiave privata che ho usato con la password: "idpsts"

-----BEGIN ENCRYPTED PRIVATE KEY-----
MIICxjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQI9VWjFBW8ySICAggA
MBQGCCqGSIb3DQMHBAjSv2ZsjvQ8bASCAoBNQwCaZu5/FuwxQlbkR3QGpCuf6orV
FMW6ZIS1l2ubHuHQOiBRFj1t85uUeDPKBIuZBCPg7J0P8RpHwg55VV4lIVHdiCcq
MY0QsOVkqibcnwhRzlNgy6kw0zVrdtXaklD4chmPrTOO7ngWUm1KPqmOafZheBfW
WE9ZlxbHjxszHQZ3ZFO/nuP09MdP0nO8cdzz/NXW8bdfnrfLUCxCbVnTdzbtZoBe
3CyIGPHpp4HsXrEMZikjHRGLjxt576KXUjY6RTkqZI0rn3PQkce1gs3BVWpuUmqe
4zesDl/uYfmfGKcsp7yK93SdRVGHjVDzVi9wk56KCKnVJAl/IZmeS+pF6YQxFhRE
mjUDELxk/YVjIDP6zbp3x9p5qYsei8lhOVJaIxeq6j3tDs9J4LP7yr7zDTjy1+Sq
pFJhPtgyvkBD6wO2Lr6R9L6ts4ALw64a8BzM97l5mb/IRpuo6KM+z3uTkQNOSpgP
4WMIjibJ0amAhDjcWIOT6qBirMFiw5njeg7G0VdpzQovwJJM1MOFrFpJVmGKBnjY
F5nLnH0fLmTFyiL46yjtg7YMnTi0ZBhcxdRa8SUZlSmeTC+KDDzKc0vwK0MUlV9O
gBdUyxC1zY6k33Pqe6pFEYBf5kieZviOZvGgkYtAIBtPEZ2iSS3SSjor9+ey0lox
GS8Oo+QCWreB/D9FcdQsYYB1ZS7PRYjvpsP5kSTXpQcx0ObvijlhzekqzEQHbqDP
z1O9xoKpIxNQOXPQMA15GwsyMENfzi9CL0+jHFkng1MRcFvJvGJpQw+THE8zVg88
LI2vBD6k9BDBPLD913sbkoRWSQsvA+tf3onGC3GPSpepp+dQdD69xT7n
-----END ENCRYPTED PRIVATE KEY-----
    
posta Dom 21.12.2014 - 02:30
fonte

1 risposta

0

I dati aggiuntivi (e corretti) nella tua modifica mi hanno permesso di ottenere l'ultimo bit. I tuoi primi due passi, de-base64 e RSA-OAEP decifrano la chiave di lavoro, ora sono corretti tranne un errore di battitura -aeop dovrebbe essere -oaep .

La decrittografia dei dati non ha funzionato abbastanza perché come dice Tom Leek nell'elemento collegato (ma mi sono perso la prima volta) il cifrario a blocchi XMLenc NON usa il riempimento PKCS7 come fa OpenSSL.

Questo rende il tuo lavoro un po 'più difficile. Per il tuo sostituto 5 e 6:

  • decrittografare i dati ( più IV e padding) come CBC ma con -nopad :
     openssl enc -aes-256-cbc -d -nopad -in data.enc -K (key_hex) -iv (any_hex) -out data.dec
      # since we leave the IV in the ciphertext you don't need to specify it with -iv
      # but you do need some value of the correct length = 16 bytes for AES, I use all 00s
  • hexdump il risultato (data.dec) o altrimenti guarda i byte con il tuo programma o qualcosa come perl. Ignora o scarta i primi 16 byte (per AES, 8 per TDES) che sono "decrittografato IV" (senza significato), e l'ultimo N byte dove N è il valore dell'ultimo byte. Per i tuoi dati, questo è: 00000000 9155_38fc eaac_e929 430d_fd96 fe07_46f2 .U8....) C.....F. 00000010 3c77_7373 653a_5573 6572_6e61 6d65_546f <wsse:Us ernameTo 00000020 6b65_6e20 7773_753a 4964_3d22 5573_6572 ken wsu: Id="User 00000030 6e61_6d65 546f_6b65 6e2d_6664 3338_6364 nameToke n-fd38cd 00000040 3964_2d62 3562_342d 3432_3438 2d61_6661 9d-b5b4- 4248-afa 00000050 362d_3338 6233_3664 3137_6132 3661_223e 6-38b36d 17a26a"> 00000060 3c77_7373 653a_5573 6572_6e61 6d65_3e61 <wsse:Us ername>a 00000070 6c69_6365 3c2f_7773 7365_3a55 7365_726e lice</ws se:Usern 00000080 616d_653e 3c77_7373 653a_5061 7373_776f ame><wss e:Passwo 00000090 7264_2054 7970_653d 2268_7474 703a_2f2f rd Type= "http:// 000000a0 646f_6373 2e6f_6173 6973_2d6f 7065_6e2e docs.oas is-open. 000000b0 6f72_672f 7773_732f 3230_3034 2f30_312f org/wss/ 2004/01/ 000000c0 6f61_7369 732d_3230 3034_3031 2d77_7373 oasis-20 0401-wss 000000d0 2d75_7365 726e_616d 652d_746f 6b65_6e2d -usernam e-token- 000000e0 7072_6f66 696c_652d 312e_3023 5061_7373 profile- 1.0#Pass 000000f0 776f_7264 5465_7874 223e_636c 6172_696e wordText ">clarin 00000100 6574_3c2f 7773_7365 3a50_6173 7377_6f72 et</wsse :Passwor 00000110 643e_3c2f 7773_7365 3a55_7365 726e_616d d></wsse :Usernam 00000120 6554_6f6b 656e_3e2c bf85_db5b 201d_bb09 eToken>, ...[ ...

    Salta byte 0..F, e anche 130- 09 = 127..12F. Ciò lascia i dati che iniziano <wsse:UsernameToken wsu:Id= e finisce </wsse:UsernameToken> - che è XML benformato con il contenuto che uno vorrebbe cifrare! Evviva!

Alcuni script di shell Unix con dd possono essere usati per estrarre i buoni dati, ma in modo clonato. Finché i dati si adattano alla memoria perl può leggere l'intero file e quindi sottostringa la parte buona link . Potrebbero esserci altre opzioni.

    
risposta data 26.12.2014 - 16:39
fonte

Leggi altre domande sui tag