Šifrování dat S/MIME

Standard S/MIME se používá převážně při šifrování a podepisování emailů. Lze jej však využít i v jiných oblastech. Jeho výhodou je jednoduchost, univerzální použitelnost, existence nástrojů na různých platformách.

Příklad postupu šifrování:

1. vytvoříme private key:

$ openssl genrsa > private.key
Generating RSA private key, 2048 bit long modulus
............................+++
...................+++
e is 65537 (0x10001)

2. z private key vytvoříme public key

$ openssl rsa -pubout < private.key  > public.key
writing RSA key

3. vytvoříme x509 certifikát (platný 1 rok na jméno localhost)

$ openssl req -new -x509 -key private.key -out cert.pem -days 365 -subj "/CN=localhost"

4. připravíme si pro testování nějaká data

$ echo "Hello" > data.txt

5. zašifrujeme data

$ openssl smime -encrypt -in data.txt -des3 cert.pem > data.p7m
$ cat data.p7m
MIME-Version: 1.0
Content-Disposition: attachment; filename="smime.p7m"
Content-Type: application/x-pkcs7-mime; smime-type=enveloped-data; name="smime.p7m"
Content-Transfer-Encoding: base64

MIIBhAYJKoZIhvcNAQcDoIIBdTCCAXECAQAxggE9MIIBOQIBADAhMBQxEjAQBgNV
BAMMCWxvY2FsaG9zdAIJAO8RWFodyIn/MA0GCSqGSIb3DQEBAQUABIIBAGlYaEF3
FbE2KPDEtIuZS56u4cHvelDCTCGWQxfA3y6kuC2cds/1WybzY7o4rutE52bpfl2v
cKfy5fFrzxZK1VLq/2TcIhzJV+uLX+tQl32pFDuhuYwNHmUpInEF2R3MmVmpLgv6
josX+dXL31Gj808KexydNgsYhAPPLsO3za6bbJKBz6jHraQ7hlWkl7bXOo5jjOE2
PgchtYPGWaLB6hxp1wSdISafRzTXfQQqmDbommO35xlO2KAravwFIbhfiYVxeOKp
LsSdlY/0n+Iy8QtZB//G9h5exsVI65jC39WyV0GJ+7wIPxqEvDV0S6WqR1TChggt
1bcZ/roLHoTkoSQwKwYJKoZIhvcNAQcBMBQGCCqGSIb3DQMHBAgxE3dQ96PaP4AI
OmoHVLAzJgs=

6. dešifrujeme data

$ openssl smime -decrypt -in data.p7m -inkey private.key
Hello

7. co obsahuje zašifrovaný soubor:

- informace o certifikátu použitém pro šifrování
- typ šifrování klíče
- zašifrovaný klíč
- typ šifrování dat
- zašifrovaná data

$ openssl asn1parse < data.p7m
    0:d=0  hl=4 l= 388 cons: SEQUENCE          
    4:d=1  hl=2 l=   9 prim: OBJECT            :pkcs7-envelopedData
   15:d=1  hl=4 l= 373 cons: cont [ 0 ]        
   19:d=2  hl=4 l= 369 cons: SEQUENCE          
   23:d=3  hl=2 l=   1 prim: INTEGER           :00
   26:d=3  hl=4 l= 317 cons: SET               
   30:d=4  hl=4 l= 313 cons: SEQUENCE          
   34:d=5  hl=2 l=   1 prim: INTEGER           :00
   37:d=5  hl=2 l=  33 cons: SEQUENCE          
   39:d=6  hl=2 l=  20 cons: SEQUENCE          
   41:d=7  hl=2 l=  18 cons: SET               
   43:d=8  hl=2 l=  16 cons: SEQUENCE          
   45:d=9  hl=2 l=   3 prim: OBJECT            :commonName
   50:d=9  hl=2 l=   9 prim: UTF8STRING        :localhost
   61:d=6  hl=2 l=   9 prim: INTEGER           :EF11585A1DC889FF
   72:d=5  hl=2 l=  13 cons: SEQUENCE          
   74:d=6  hl=2 l=   9 prim: OBJECT            :rsaEncryption
   85:d=6  hl=2 l=   0 prim: NULL              
   87:d=5  hl=4 l= 256 prim: OCTET STRING      [HEX DUMP]:3EB4A81EE1E12B2886C3633D00A702AFA5313B5DB1FCCC24EF857D7217FD49EC56F98C2F9F565845C950906059F4E403155691FE33E8ED4AE7BACA919AD5C51ECFC69E304BC9FACE0CEB901D9D90E6258CCBDD68854FE0370D278BAC5BE44A81A5740EF1608CE89623E1D00454811C6E144BDAD9B07A88D7D5BAB3ECCD85D43FF729D6882A8E5DEE410DF87419F4D375F56B2646F7470D8C0BA7E12326644721C91D4FCC9835880EA20C70D56135A6801BB430F23A33432F356CCA22B5022B46B2B444B26B3AA280B8B6885C061C5F7813730B2DE819F45790286F02CBCA126FDFA98E4E3FD7B67E0F68763CD52E07D9FB4F21144A3AEAECCCE7C1E0ABF5EAE6
  347:d=3  hl=2 l=  43 cons: SEQUENCE          
  349:d=4  hl=2 l=   9 prim: OBJECT            :pkcs7-data
  360:d=4  hl=2 l=  20 cons: SEQUENCE          
  362:d=5  hl=2 l=   8 prim: OBJECT            :des-ede3-cbc
  372:d=5  hl=2 l=   8 prim: OCTET STRING      [HEX DUMP]:AF125ED688E352D2
  382:d=4  hl=2 l=   8 prim: cont [ 0 ]
Není-li uvedeno jinak, obsah této stránky je pod licencí Creative Commons Attribution-ShareAlike 3.0 License