
Oggi vediamo un semplice esempio di sequenza di operazioni per cifrare un messaggio e successivamente decifrarlo, con lo scopo di scrivere un messaggio segreto che solo il destinatario può decifrare. Lo scenario è il classico Alice scrive a Bob un messaggio che solo lui può leggere, utilizzando la crittografia asimmetrica ideata negli anni 70 da Rivest, Adleman e Shamir, nella quale si cifra un messaggio con una chiave (pubblica) e si decifra con una seconda chiave, accoppiata però alla prima (privata).
L’attenzione, più che sul codice, è posta sulla corretta sequenza di operazioni e su quali sono i parametri giusti da utilizzare.
Sommario
Bob genera le chiavi con openssl
Come prima cosa Bob si procura una coppia di chiavi RSA
Chiave privata
marcob@js:~$ openssl genrsa -des3 -out privatekey 1024 Generating RSA private key, 1024 bit long modulus ..........++++++ ..............++++++ e is 65537 (0x10001) Enter pass phrase for privatekey: Verifying - Enter pass phrase for privatekey: marcob@js:~$ ll totale 132 drwxrwxr-x 2 marcob marcob 4096 feb 10 09:37 ./ drwxrwxr-x 8 marcob marcob 4096 feb 7 15:56 ../ -rw-rw-r-- 1 marcob marcob 963 feb 10 09:38 privatekey
Certificato della chiave privata:
-----BEGIN RSA PRIVATE KEY----- Proc-Type: 4,ENCRYPTED DEK-Info: DES-EDE3-CBC,4FA0F44C01DF5F3F J6zb3OI9oCN/31VvhRRlzAxiv5AilIlFy0dTgmySi3G+ffYzalIm5lrgx7sSgOPa TgR4djJUPHg24J4ZceicYN+J3rwQQR02okTBGdMwx9uN+dwtJI7eg7s6cYm5Ulu9 +hT72rvSejlQNh8qCb0+291USpWHYID6X6Hef5SH7GUTaJT76MGEOpzp3VU+0oB6 yTdJzA43qDsME4OwvenQyLbdKpM/iXGHn9h/OLaSuJIrLNUDOvP3mCqBBa7RvFIQ FsDSF7L0zdozjpxM/Lr6oa3A7dLHyqWTuDKg+S3Z3ETdzlV34FvBSnjYtltE2OZB WFpB7lip5wVPOxA4sUZ0RXlRaWytC5CROjhc5VnR3kd6XwMmdmbTKkdOYy00OUIq bNfLYeVsOr4HyIVXxOYbMB41EoN4FzyXSosW9baXUxQ2L29lzJY1bIRmljIiF4Q7 Qk5/qLwU58y3EmtE0itMWlC3Iix0HY3UUZlxfc9JapsuT/6lVEzrFNIVaDYZilZb KHQS39ZAWP2PI2LQuC5KGDme1rwDfLvKEYisZbLUTgIJIzfOf9ETpqtDR9Pot1uz G9rMabMsA5BOzUyqXkd5I+ilZQD71BlruwBgQ7d1zwyi4mN4jwsRghuoEuTMwWZP lasIJVy1LS6gE7zIGDiJItCan9Cm1DuZwlE6lXtlf1aahK4rUz3MvgRCV2cs2S8Z mjzFg8JqHu5Q09U/J61i2xzWiyLsVCsSpoupDqoQtoluS6f9HUYfZZbpBJTKm0IY Y6Aypggbxqq52L1XPpj+aF5H5uzBHQoDpXqmKNp3rV2T6AYMlzRVog== -----END RSA PRIVATE KEY-----
Chiave pubblica
marcob@js:~$ openssl rsa -in privatekey -pubout -out publickey Enter pass phrase for privatekey: writing RSA key marcob@js:~$
Certificato della chiave pubblica =>
-----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCkg9z7E2Mh0nNDHy8/C3tRtqXQ sePXpMg+FXxf5EHxzMPfX+AbL2e9v6gUX8BHekiKvWoopl5OtPb2nubHAW2lIDnB Ku1DEWcVGAaIbG/aC6804I0oWEOHCN6Wp0Z/En9Fw5DiuRdfQULPvhjD4Oy5g0UQ 6GkjYCiv4GnJRbpENwIDAQAB -----END PUBLIC KEY-----
Bob può inviare la sua chiave pubblica ad Alice, oppure può metterla nel suo sito, in modo che chiunque possa scaricarla.
Cifratura e decifratura di un messaggio
Ora Alice cifra un messaggio con la chiave pubblica di Bob; lui (e solo lui) potrà leggere il messaggio utilizzando la sua chiave privata. In questo modo ho la certezza del destinatario.
Cifratura (Alice)
- Dato in chiaro =>NEL MEZZO DEL CAMMIN DI NOSTRA VITA
- Estraggo la chiave pubblica dal certificato con la funzione openssl_pkey_get_public =>Resource id #4
- Cifro il dato (nota che alla funzione openssl_public_encrypt passo la RISORSA (Resource id #4) come chiave, NON il certificato):
- Dato in scuro =>
™ÍB÷ œtΧÖà6õÖ]R¹â¸'à/KPqÙ°Æ…ÒÈ·õ3^†3ëwV®úó±èn¾Z_•ìÒÌZùÑ‘PKæ]ÖUI‰ ?ÆJ7OŠ}=È(ë·QZ«® ý¥£cF&š¹pkw{0fszµnÔ8‹SÊ\1€$>s - Dato in scuro b64encoded =>
mRfNQvcgnHTOp9bgNvXWXRdSueK4J+AvS1Bx2bDGhdLIgbf1jRozXoYz63dWrvqd87HoBm6+Wl+ V7NLMAVr5E9GRUEvmXdYRVUmJCho/xko3T4oYfT3IKOu3UVqrrh0g/aWjY0YDJpq5cGt3ezBmc3 q1bgTUOItTf8pcMYAkPnM=
Invio il dato a Bob
Decifratura (Bob)
- Estraggo la chiave privata dal certificato con openssl_pkey_get_private: => Resource id #6
- Decifro il dato oscuro (nota che alla funzione openssl_private_decrypt passo la RISORSA Resource id #6 ritornata dalla openssl_get_privatekey, NON il certificato):
- Finalmente, il testo nuovamente in chiaro =>
NEL MEZZO DEL CAMMIN DI NOSTRA VITA
Riassunto.
- In trasmissione, Alice:
- openssl_pkey_get_public
- openssl_public_encrypt
- In ricezione, Bob:
- openssl_pkey_get_private
- openssl_private_decrypt
Con questa sequenza solo Alice è certa che solo il destinatario Bob potrà leggere il suo messaggio. Ma essendo pubblica la chiave pubblica di Bob, Bob non potrà essere certo di chi ne sia il mittente.
Commenti recenti