Narzędzia użytkownika

Narzędzia witryny


Pasek boczny

Strony:

Linki:

notatki:szyfrowanie_assymetric

To jest stara wersja strony!


Szyfrowanie Asymetryczne

Do realizacji zadania wykorzystano WSL1 na systemie Windows 2019 server.
Dystrybucja uruchomiona pod systemem WSL to Ubuntu 22.04.4 LTS
Do włączenia legacy providera w OpenSSL wykorzystano poniższy tutorial:
https://lindevs.com/enable-openssl-legacy-provider-on-ubuntu

Zadanie 1

Korzystają c z polecenia openssl genrsa zapisz składnię polecenia, które wygeneruje parę kluczy (publiczny i prywatny) RSA o długości 2048 bitów I zapisze je w pliku o nazwie rsa.key. Po wygenerowaniu kluczy sprawdź zawartość pliku rsa.key za pomocą następującego p olecenia:
openssl rsa in rsa.key text

Realizacja

root@WSL:lab6_pliki> ls
'Lab6 - szyfry asymetryczne - zaoczne.pdf'  'Lab6 - szyfry asymetryczne v2.pdf'
root@WSL:lab6_pliki> openssl genrsa -out rsa.key 2048
root@WSL:lab6_pliki> openssl rsa -in rsa.key -text
Private-Key: (2048 bit, 2 primes)
modulus:
00:97:ba:ad:c4:bb:34:77:52:2d:4c:f4:96:36:db:
4d:ef:0c:55:cb:5f:8c:22:53:7d:81:c8:10:20:cf:
c9:bd:6d:81:df:ad:0f:22:5c:aa:ef:e3:91:ec:3c:
8c:19:0a:46:38:7b:00:7e:00:e1:bf:2a:b8:71:bd:
f5:e2:a5:61:3b:e5:ed:ac:a4:b2:6e:54:8d:95:34:
dd:40:be:4b:e6:05:1b:c7:1e:d8:2a:8c:b9:19:fa:
bc:73:f8:23:13:d6:28:87:52:11:56:fe:05:d6:27:
bc:28:29:57:2d:f9:6f:7a:e4:ee:d2:d3:67:d3:ea:
b2:c2:6d:1b:cb:ba:4b:1a:b9:12:16:3f:0a:7d:e1:
83:89:12:9d:3b:03:e5:aa:1d:98:50:47:19:05:01:
cd:7f:e0:1f:f8:81:4a:b1:ce:99:e9:74:b1:81:9e:
ca:eb:a6:43:e6:b4:fe:f4:1c:48:15:c4:b3:82:68:
a5:e7:0f:b6:2f:82:69:d2:78:96:43:a3:72:bd:28:
44:24:f2:b7:c5:82:8b:71:77:e5:18:38:dc:f9:82:
7f:7d:38:70:d8:d1:3f:a6:66:3c:62:5a:bb:51:9c:
c6:5d:7c:38:ce:6d:77:7d:cc:80:b4:d8:77:79:46:
8b:8f:8a:57:f8:4a:0e:89:3b:42:f1:0f:0f:83:29:
28:7d
publicExponent: 65537 (0x10001)
privateExponent:
04:9e:80:73:73:4c:38:6f:b8:da:55:68:8c:a3:50:
de:e7:58:bb:4d:72:db:89:55:7c:fc:7a:ba:8c:fe:
34:1f:f5:2a:ba:94:31:df:1c:03:1b:ec:a6:d7:a7:
0a:37:72:5b:7e:29:cd:d6:e2:b3:2a:59:48:23:d8:
d6:fd:62:ea:eb:12:8e:70:20:7b:29:b9:7a:62:8c:
1e:7a:f7:48:e4:3c:96:c0:c7:cd:9a:7a:ce:21:80:
82:e5:4f:28:12:46:7f:41:79:2e:aa:a2:c1:da:1e:
d3:cd:82:63:c4:c0:11:ea:8d:f7:69:76:89:3b:3a:
c0:49:88:65:98:e1:22:c9:eb:3f:60:e3:44:6a:2d:
b3:d2:6b:5b:03:3c:69:fd:ee:21:fa:34:ac:37:8f:
6e:ee:f5:64:c5:6c:2d:70:a6:55:8d:3c:04:17:e5:
fb:60:ea:58:c9:87:42:81:39:db:25:d5:eb:b3:63:
d4:25:12:38:c9:a7:e9:a0:fd:4d:08:bf:30:3e:3a:
c0:e2:f0:9f:a8:cd:a0:bd:b1:6a:ae:bb:22:b1:7d:
e8:f2:f0:f0:06:69:7e:c1:a7:50:94:80:00:a1:fa:
bf:f9:14:51:73:a9:ce:0f:b8:d7:8b:b3:32:c8:f2:
8b:60:30:0c:2c:9c:7f:41:a2:d0:34:67:81:1e:7d:
61
prime1:
00:c7:05:67:36:47:db:b0:bc:62:e1:a4:6c:c7:b2:
a2:db:32:61:16:22:46:63:20:46:3c:00:f1:81:db:
fd:46:e3:ee:9d:5c:15:1b:45:2a:10:52:e1:8f:1a:
ee:82:ca:98:70:5b:1b:77:8d:ed:67:7c:12:dd:9e:
e6:20:b8:d0:58:06:04:6c:24:33:dd:e0:ea:91:c8:
32:3f:b6:24:7a:e4:42:74:ea:ca:d6:ce:86:6b:a9:
e6:bd:9b:b4:06:29:25:fe:fb:b9:08:2c:33:a4:91:
52:10:b2:c4:29:12:c1:60:7e:1f:8d:9b:46:5f:ab:
c0:4d:07:5d:54:74:f6:e4:11
prime2:
00:c3:2b:2c:0b:bb:00:70:d5:b1:ff:89:83:27:22:
0e:3c:8f:db:ca:96:be:1c:b4:31:57:08:1d:a8:c6:
7c:43:26:41:61:a0:10:46:14:6a:d4:4d:76:bf:8b:
c9:ca:ce:47:fd:69:8e:1f:a1:7e:0b:7c:0a:f8:39:
30:02:f5:56:56:46:21:78:70:95:f0:b8:2a:3b:b6:
bf:07:4c:b7:ea:92:66:7a:71:d0:4e:e0:4f:b8:ff:
89:79:0e:be:12:24:fb:04:76:ad:72:63:7c:10:29:
b8:b3:a2:cd:bf:45:c2:d2:5d:42:ea:d2:76:3d:f2:
a7:e1:ae:83:f0:9f:35:79:ad
exponent1:
56:80:a5:b4:b5:14:ea:c3:66:e3:16:39:65:ae:e2:
14:0d:d8:9e:eb:34:d6:be:df:68:13:2c:e5:39:7d:
e3:83:0c:62:7e:f4:79:8e:dd:52:8d:03:96:d4:a8:
d8:56:40:5d:8d:6b:e9:d1:d9:5f:02:51:9c:dc:04:
c0:32:33:f4:1e:61:6b:b3:6c:8b:c2:c7:91:a7:87:
17:a4:0e:45:0f:d3:46:c8:0a:73:c4:fe:2d:eb:81:
eb:e5:b2:20:7f:60:11:6c:cd:a6:9c:b7:b1:8e:ac:
31:af:d1:8c:dc:a7:0a:4e:a7:5e:40:20:1d:53:24:
59:16:9b:5d:2b:1d:68:51
exponent2:
00:93:8a:a7:99:96:9d:16:af:f6:08:40:64:ad:c8:
c9:0a:6f:96:b0:e8:94:80:0e:98:de:3a:7c:71:82:
db:9d:c7:e5:d5:6f:b3:dd:c6:c1:9c:0d:93:9f:ea:
85:7a:93:c7:48:83:eb:b5:6d:d8:63:c6:3a:64:bc:
96:d7:25:b1:47:37:6d:46:27:96:b2:8c:07:21:6d:
5d:ac:9f:0a:ca:82:32:86:8e:53:f3:cd:0f:77:c3:
76:a1:d5:cb:4a:dc:3a:07:7d:d0:51:91:73:d0:a4:
39:c5:53:66:47:1a:ed:d5:2a:3b:d4:59:96:99:ee:
3f:8c:14:ea:19:95:c2:4f:61
coefficient:
14:b8:7d:f9:65:90:6a:65:37:6e:41:04:d8:34:c6:
f3:91:0f:d6:d1:c8:a5:2f:70:28:b0:bb:38:46:d9:
3b:dd:9c:e9:71:e0:38:64:00:2e:e6:23:ff:7e:e4:
54:fc:33:45:ba:57:c2:36:19:34:d1:1d:47:f2:fc:
cb:f7:42:0f:fc:15:ca:68:48:1e:65:70:c1:fa:a9:
32:81:3f:79:45:dd:5f:5c:55:c0:ed:90:e6:9b:6e:
80:a6:47:27:12:e1:e1:80:80:5b:55:75:ac:19:bd:
0f:69:e4:95:3f:b9:f0:7c:d8:df:8c:ff:ba:21:f7:
e1:b5:26:df:a6:a9:80:9a
writing RSA key
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCXuq3EuzR3Ui1M
9JY2203vDFXLX4wiU32ByBAgz8m9bYHfrQ8iXKrv45HsPIwZCkY4ewB+AOG/Krhx
vfXipWE75e2spLJuVI2VNN1AvkvmBRvHHtgqjLkZ+rxz+CMT1iiHUhFW/gXWJ7wo
KVct+W965O7S02fT6rLCbRvLuksauRIWPwp94YOJEp07A+WqHZhQRxkFAc1/4B/4
gUqxzpnpdLGBnsrrpkPmtP70HEgVxLOCaKXnD7YvgmnSeJZDo3K9KEQk8rfFgotx
d+UYONz5gn99OHDY0T+mZjxiWrtRnMZdfDjObXd9zIC02Hd5RouPilf4Sg6JO0Lx
Dw+DKSh9AgMBAAECggEABJ6Ac3NMOG+42lVojKNQ3udYu01y24lVfPx6uoz+NB/1
KrqUMd8cAxvsptenCjdyW34pzdbisypZSCPY1v1i6usSjnAgeym5emKMHnr3SOQ8
lsDHzZp6ziGAguVPKBJGf0F5Lqqiwdoe082CY8TAEeqN92l2iTs6wEmIZZjhIsnr
P2DjRGots9JrWwM8af3uIfo0rDePbu71ZMVsLXCmVY08BBfl+2DqWMmHQoE52yXV
67Nj1CUSOMmn6aD9TQi/MD46wOLwn6jNoL2xaq67IrF96PLw8AZpfsGnUJSAAKH6
v/kUUXOpzg+414uzMsjyi2AwDCycf0Gi0DRngR59YQKBgQDHBWc2R9uwvGLhpGzH
sqLbMmEWIkZjIEY8APGB2/1G4+6dXBUbRSoQUuGPGu6CyphwWxt3je1nfBLdnuYg
uNBYBgRsJDPd4OqRyDI/tiR65EJ06srWzoZrqea9m7QGKSX++7kILDOkkVIQssQp
EsFgfh+Nm0Zfq8BNB11UdPbkEQKBgQDDKywLuwBw1bH/iYMnIg48j9vKlr4ctDFX
CB2oxnxDJkFhoBBGFGrUTXa/i8nKzkf9aY4foX4LfAr4OTAC9VZWRiF4cJXwuCo7
tr8HTLfqkmZ6cdBO4E+4/4l5Dr4SJPsEdq1yY3wQKbizos2/RcLSXULq0nY98qfh
roPwnzV5rQKBgFaApbS1FOrDZuMWOWWu4hQN2J7rNNa+32gTLOU5feODDGJ+9HmO
3VKNA5bUqNhWQF2Na+nR2V8CUZzcBMAyM/QeYWuzbIvCx5GnhxekDkUP00bICnPE
/i3rgevlsiB/YBFszaact7GOrDGv0YzcpwpOp15AIB1TJFkWm10rHWhRAoGBAJOK
p5mWnRav9ghAZK3IyQpvlrDolIAOmN46fHGC253H5dVvs93GwZwNk5/qhXqTx0iD
67Vt2GPGOmS8ltclsUc3bUYnlrKMByFtXayfCsqCMoaOU/PND3fDdqHVy0rcOgd9
0FGRc9CkOcVTZkca7dUqO9RZlpnuP4wU6hmVwk9hAoGAFLh9+WWQamU3bkEE2DTG
85EP1tHIpS9wKLC7OEbZO92c6XHgOGQALuYj/37kVPwzRbpXwjYZNNEdR/L8y/dC
D/wVymhIHmVwwfqpMoE/eUXdX1xVwO2Q5ptugKZHJxLh4YCAW1V1rBm9D2nklT+5
8HzY34z/uiH34bUm36apgJo=
-----END PRIVATE KEY-----
root@WSL:lab6_pliki>

Pytania

Jakie jest przeznaczenie parametrów: modulus, publicExponent, privateExponent, prime ?

  • modulus (n):

Iloczyn dwóch dużych liczb pierwszych (p i q). Wspólny składnik klucza publicznego i prywatnego.
 Używany w szyfrowaniu i deszyfrowaniu.

  • publicExponent (e):

Wykładnik publiczny. Najczęściej ma wartość 65537.
Służy do szyfrowania wiadomości lub weryfikacji podpisu cyfrowego.

  • privateExponent (d):

Wykładnik prywatny. Obliczany na podstawie e, p, i q.
Służy do odszyfrowywania wiadomości lub generowania podpisu cyfrowego.

  • prime1 (p) i prime2 (q):

Dwie liczby pierwsze, na podstawie których tworzony jest modulus.
Służą do wewnętrznych obliczeń klucza prywatnego.

Które z parametrów mogą być publicznie dostępne (które są częścią klucza publicznego a które powinny być utrzymywane w tajemnicy (są częścią klucz prywatnego) ?

  • Publiczne (mogą być jawne, wchodzą w skład klucza publicznego):
    • modulus (n)
    • publicExponent (e)
  • Prywatne (muszą być utrzymywane w tajemnicy):
    • privateExponent (d)
    • prime1 (p)
    • prime2 (q)
    • oraz parametry pochodne, np. $d \mod (p-1)$, $d \mod (q-1)$, $q^{-1} \mod p$

Zadanie 2

Zapisz i wykonaj polecenie dokonujące ekstrakcji publicznego klucza RSA z pliku rsa.key i zapisującego go w pliku rsa.pubkey oraz wyświetlenie jego zawar tości.

Realizacja

root@WSL:lab6_pliki> openssl rsa -in rsa.key -pubout -out rsa.pubkey
writing RSA key
root@WSL:lab6_pliki> openssl rsa -pubin -in rsa.pubkey -text
Public-Key: (2048 bit)
Modulus:
00:97:ba:ad:c4:bb:34:77:52:2d:4c:f4:96:36:db:
4d:ef:0c:55:cb:5f:8c:22:53:7d:81:c8:10:20:cf:
c9:bd:6d:81:df:ad:0f:22:5c:aa:ef:e3:91:ec:3c:
8c:19:0a:46:38:7b:00:7e:00:e1:bf:2a:b8:71:bd:
f5:e2:a5:61:3b:e5:ed:ac:a4:b2:6e:54:8d:95:34:
dd:40:be:4b:e6:05:1b:c7:1e:d8:2a:8c:b9:19:fa:
bc:73:f8:23:13:d6:28:87:52:11:56:fe:05:d6:27:
bc:28:29:57:2d:f9:6f:7a:e4:ee:d2:d3:67:d3:ea:
b2:c2:6d:1b:cb:ba:4b:1a:b9:12:16:3f:0a:7d:e1:
83:89:12:9d:3b:03:e5:aa:1d:98:50:47:19:05:01:
cd:7f:e0:1f:f8:81:4a:b1:ce:99:e9:74:b1:81:9e:
ca:eb:a6:43:e6:b4:fe:f4:1c:48:15:c4:b3:82:68:
a5:e7:0f:b6:2f:82:69:d2:78:96:43:a3:72:bd:28:
44:24:f2:b7:c5:82:8b:71:77:e5:18:38:dc:f9:82:
7f:7d:38:70:d8:d1:3f:a6:66:3c:62:5a:bb:51:9c:
c6:5d:7c:38:ce:6d:77:7d:cc:80:b4:d8:77:79:46:
8b:8f:8a:57:f8:4a:0e:89:3b:42:f1:0f:0f:83:29:
28:7d
Exponent: 65537 (0x10001)
writing RSA key
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAl7qtxLs0d1ItTPSWNttN
7wxVy1+MIlN9gcgQIM/JvW2B360PIlyq7+OR7DyMGQpGOHsAfgDhvyq4cb314qVh
O+XtrKSyblSNlTTdQL5L5gUbxx7YKoy5Gfq8c/gjE9Yoh1IRVv4F1ie8KClXLflv
euTu0tNn0+qywm0by7pLGrkSFj8KfeGDiRKdOwPlqh2YUEcZBQHNf+Af+IFKsc6Z
6XSxgZ7K66ZD5rT+9BxIFcSzgmil5w+2L4Jp0niWQ6NyvShEJPK3xYKLcXflGDjc
+YJ/fThw2NE/pmY8Ylq7UZzGXXw4zm13fcyAtNh3eUaLj4pX+EoOiTtC8Q8Pgyko
fQIDAQAB
-----END PUBLIC KEY-----
root@WSL:lab6_pliki> cat rsa.pubkey
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAl7qtxLs0d1ItTPSWNttN
7wxVy1+MIlN9gcgQIM/JvW2B360PIlyq7+OR7DyMGQpGOHsAfgDhvyq4cb314qVh
O+XtrKSyblSNlTTdQL5L5gUbxx7YKoy5Gfq8c/gjE9Yoh1IRVv4F1ie8KClXLflv
euTu0tNn0+qywm0by7pLGrkSFj8KfeGDiRKdOwPlqh2YUEcZBQHNf+Af+IFKsc6Z
6XSxgZ7K66ZD5rT+9BxIFcSzgmil5w+2L4Jp0niWQ6NyvShEJPK3xYKLcXflGDjc
+YJ/fThw2NE/pmY8Ylq7UZzGXXw4zm13fcyAtNh3eUaLj4pX+EoOiTtC8Q8Pgyko
fQIDAQAB
-----END PUBLIC KEY-----
root@WSL:lab6_pliki>    

Zadanie 3

1. Przygotuj plik tekstowy z wiadomością np. “This is a confidential message” (Podpowiedź: należy użyć komendy pkeyutl i nazwać plik “plain”)
2. Napisz składnię polecenia openssl do zaszyfrowania wiadomości zawartej w pliku “plain”. Szyfrogram zapisz w pliku o nazwie “encRSA”. Podpowiedź: należy użyć komendy “pkeyutl”.
3. Napisz składnię komendy openssl używanej do odszyfrowania szyfrogramu z kroku nr 2

Realizacja

root@WSL:lab6_pliki> echo "This is a confidential message" > plain
root@WSL:lab6_pliki> openssl pkeyutl -encrypt -pubin -inkey rsa.pubkey -in plain -out encRSA
root@WSL:lab6_pliki> openssl pkeyutl -decrypt -inkey rsa.key -in encRSA -out decrypted.txt
root@WSL:lab6_pliki> hexdump -C encRSA
00000000  53 11 ca 10 6a b4 b3 b9  e3 51 c7 8c da 8c c0 6c  |S...j....Q.....l|
00000010  c2 df 0e f6 7c 28 c2 62  4e 5c 02 08 76 d8 27 56  |....|(.bN\..v.`V|
00000020  64 ec b2 b5 83 8e 7c 58  b3 f2 15 6e c8 8e 44 fd  |d.....|X...n..D.|
00000030  a4 40 6a 2c b4 b1 03 35  c8 b1 5c 4e f5 d8 3e d1  |.@j,...5..\N..>.|
00000040  68 47 a7 2a b5 bf a2 45  e0 7e de ca 5c e4 3f 99  |hG.*...E.~..\.?.|
00000050  82 9e 32 da 29 a1 e1 db  07 71 d9 7d da 06 e0 f1  |..2.)....q.}....|
00000060  6a 51 36 64 86 a8 ae 7d  9f 40 53 a3 61 5d fd 74  |jQ6d...}[email protected]].t|
00000070  f9 3f f6 e8 56 05 7b f8  fd 2a d6 9d ba e6 27 0a  |.?..V.{..*....`.|
00000080  88 a7 c7 1f 44 f3 37 50  04 b6 15 8b d4 4f 2f d4  |....D.7P.....O/.|
00000090  df d4 9b ea 11 2a 0d 2b  18 13 fb 2a 2c 0c 2c e7  |.....*.+...*,.,.|
000000a0  a5 25 d1 e7 f4 49 7b a0  92 9e c2 b2 73 ea c6 f8  |.%...I{.....s...|
000000b0  cc 79 a7 73 39 34 fd ab  19 5b 28 e2 3a 1f 9e 8b  |.y.s94...[(.:...|
000000c0  d3 df 35 f0 4c bd 09 82  89 ba 16 c7 8c 8f 09 12  |..5.L...........|
000000d0  98 53 02 ca 88 a5 be 1b  cb 43 fa db f6 68 fb 28  |.S.......C...h.(|
000000e0  41 b7 34 ac 0e ad fd bc  1a 78 a8 bb 3c 5f 51 c3  |A.4......x..<_Q.|
000000f0  5d 65 ce 7a 60 e9 7c 00  22 37 a5 a2 64 64 e0 8f  |]e.z`.|.``7..dd..|
00000100
root@WSL:lab6_pliki> hexdump -C decrypted.txt
00000000  54 68 69 73 20 69 73 20  61 20 63 6f 6e 66 69 64  |This is a confid|
00000010  65 6e 74 69 61 6c 20 6d  65 73 73 61 67 65 0a     |ential message.|
0000001f
root@WSL:lab6_pliki>

Zadanie 4

Napisz składnię polecenia openssl do stworzenia sygnatury (podpisu) pliku ’plain’ I zapisaniu jej w pliku o nazwie ’sig’. Podpowiedź: użyj polecenia “openssl pk yeutl”. Napisz składnię polecenia openssl do weryfikacji prawdziwości sygnatury zawartej w pliku ’sig’. Podpowiedź: po poprawnym wykonaniu na ekranie powinna pojawić się informacja: “Signautre Verified Successfully”. Podpowiedź: użyj polecenia “openssl pkyeutl”.

Realizacja

root@WSL:lab6_pliki> openssl pkeyutl -sign -inkey rsa.key -in plain -out sig
root@WSL:lab6_pliki> openssl pkeyutl -verify -pubin -inkey rsa.pubkey -in plain -sigfile sig
Signature Verified Successfully
root@WSL:lab6_pliki>

Pytania

Jakiego klucza należy użyć do poszczególnych operacji wykonanych w poleceniu nr 4 ?

  • Podpisywanie (tworzenie sygnatury):

Należy użyć klucza prywatnego (rsa.key) – tylko właściciel klucza może podpisać dane.

  • Weryfikacja podpisu:

Należy użyć klucza publicznego (rsa.pubkey) – każdy może sprawdzić autentyczność podpisu.

Zadanie 5

Użytkownik maszyny A chce przesłać do użytkownika maszyny B wiadomość w sposób bezpieczny. W tym celu chce zaszyfrować wiadomość szyfrem symetrycznym, jednak użytkownik maszyny B nie dysponuje tajnym kluczem do odszyfrowania wiadomości. Zapisz składnię pol eceń I prawidłową sekwencję działań które powinny zostać wykonane przez użytkowników maszyn A i B. Następnie wykonaj te działania I sprawdź czy rzeczywiście przesłaną wiadomość udało si e odszyfrować użytkownikowi maszyny B. Podpowiedź: użyj poleceń “opens sl enc” oraz “openssl pkeyutl”.

Realizacja

#Generowanie klucza symetrycznego:
root@WSL:lab6_pliki> openssl rand -out secret.key 32
#Szyfrowanie wiadomości przy użyciu klucza symetrycznego:
root@WSL:lab6_pliki> openssl enc -aes-256-cbc -salt -in plain -out encMessage -pass file:./secret.key
*** WARNING : deprecated key derivation used.
Using -iter or -pbkdf2 would be better.
#Szyfrowanie klucza symetrycznego za pomocą klucza publicznego użytkownika maszyny B:
root@WSL:lab6_pliki> openssl pkeyutl -encrypt -pubin -inkey rsa.pubkey -in secret.key -out encSecret.key
#Odszyfrowanie klucza symetrycznego przy użyciu klucza prywatnego:
root@WSL:lab6_pliki> openssl pkeyutl -decrypt -inkey rsa.key -in encSecret.key -out secret.key
#Odszyfrowanie wiadomości przy użyciu odszyfrowanego klucza symetrycznego:
root@WSL:lab6_pliki> openssl enc -d -aes-256-cbc -in encMessage -out decryptedMessage -pass file:./secret.key
*** WARNING : deprecated key derivation used.
Using -iter or -pbkdf2 would be better.
root@WSL:lab6_pliki> cat plain
This is a confidential message
root@WSL:lab6_pliki> cat decryptedMessage
This is a confidential message
root@WSL:lab6_pliki> hexdump -C encMessage
00000000  53 61 6c 74 65 64 5f 5f  c6 35 4f 2f aa 19 44 ff  |Salted__.5O/..D.|
00000010  f8 e1 cf a5 eb 6d 65 d9  64 e8 5e e0 5f 3e 3e 34  |.....me.d.^._>>4|
00000020  ad f2 d0 0f c8 57 91 af  b3 89 5f 6f 13 0b db 65  |.....W...._o...e|
00000030
root@WSL:lab6_pliki> hexdump -C encSecret.key
00000000  1e 99 ed 85 4a c0 c4 55  d4 34 8d 52 5d 7b 0d ba  |....J..U.4.R]{..|
00000010  c9 a9 f4 2b 4a 87 f2 11  e7 a8 26 ea ad d9 b4 a6  |...+J.....&.....|
00000020  5a 61 21 22 6f dc a3 be  14 b4 68 c0 a8 f9 54 16  |Za!``o.....h...T.|
00000030  98 8f a1 46 6d 39 8f c1  58 8d 85 27 ef fc b5 e7  |...Fm9..X..`....|
00000040  bc 24 80 62 df d1 0d 3a  43 45 6d 41 9f 90 b6 58  |.$.b...:CEmA...X|
00000050  39 b5 7a 39 2f de 88 a7  89 8a e7 4c af 8f 7a 2d  |9.z9/......L..z-|
00000060  ea 45 a7 f2 88 9b 96 78  a1 d0 a2 a6 36 31 15 d3  |.E.....x....61..|
00000070  99 7f 44 a5 a1 db 83 56  d5 c7 90 4e 12 18 75 fc  |..D....V...N..u.|
00000080  53 cc e8 45 c3 94 f5 4c  72 4e ff 96 1f 99 40 a4  |S..E...LrN....@.|
00000090  86 fa 17 71 cf df 62 1e  e5 e7 c6 c4 a9 01 ed 33  |...q..b........3|
000000a0  60 67 73 46 86 d2 a3 73  91 c1 3a 9e 6d 30 60 f6  |`gsF...s..:.m0`.|
000000b0  2a 0c ea a8 28 d2 76 14  c5 d4 25 a0 b7 85 8d 27  |*...(.v...%....`|
000000c0  31 bf 83 7d 0b 1e be ab  2e c9 88 91 68 e1 11 73  |1..}........h..s|
000000d0  b5 f8 2b 1f 89 fa 88 85  8b 8f 95 9d 0d 9c dc 55  |..+............U|
000000e0  77 2b e5 8f 4e c7 7b 4b  38 ff d8 47 b1 08 60 a8  |w+..N.{K8..G..`.|
000000f0  a2 44 09 db ef e3 68 f8  04 63 73 d0 db 2e 92 c8  |.D....h..cs.....|
00000100
root@WSL:lab6_pliki>

Zadanie 6

Użytkownik maszyny A chce przesłać do użytkownika maszyny B wiadomość z zachowaniem jej integralności. Zapisz składnię poleceń oraz prawidłową sekwencję działań, które powinny zostać wykonan e przez użytkowników maszyn A i B. Następnie wykonaj te działania i sprawdź czy rzeczywiście użytkownikowi maszyny B udało się potwierdzić integralność odebranej wiadomości. Polecenie wykonaj w dwóch wariantach: 1) używając poleceń “openssl pkeyutl”, 2) uż ywając poleceń “openssl dgst”.

Realizacja wariant 1

root@WSL:lab6_pliki> openssl pkeyutl -sign -inkey rsa.key -in plain -out sig
root@WSL:lab6_pliki> openssl pkeyutl -verify -inkey rsa.pubkey -in plain -sigfile sig
Signature Verified Successfully

Realizacja wariant 2

root@WSL:lab6_pliki> openssl dgst -sha256 -sign rsa.key -out sig plain
root@WSL:lab6_pliki> openssl dgst -sha256 -verify rsa.pubkey -signature sig plain
Verified OK

Pytania

Co się stanie jeżeli atakujący zmodyfikuje dane wysłane przez użytkownika maszyny A do użytkownika maszyny B (rozważ dwie sytuacje: a) zmodyfikowane zostaną dane ale nie sygnatura, b) zmodyfikowana zostanie sygnatura ale nie dane) ? Odpowiedź uzasadnij.

  • Zmodyfikowane dane, ale nie sygnatura:

Jeśli atakujący zmodyfikuje dane (np. wiadomość w pliku plain), ale nie zmodyfikuje sygnatury, wówczas weryfikacja podpisu przez użytkownika maszyny B zakończy się niepowodzeniem, ponieważ podpis został wygenerowany na oryginalnej treści, a zmodyfikowana treść nie zgadza się z podpisem. Otrzyma komunikat o błędzie.

  • Zmodyfikowana sygnatura, ale nie dane:

Jeśli atakujący zmodyfikuje tylko sygnaturę, ale nie zmieni danych, wówczas weryfikacja podpisu zakończy się niepowodzeniem, ponieważ zmieniony podpis nie będzie pasował do oryginalnych danych. Użytkownik maszyny B nie będzie w stanie zweryfikować poprawności podpisu.

Co się stanie gdy atakujący podmieni klucz publiczny użytkownika maszyny B na swój ? Czy w tej sytuacji atakujący może zamienić oryginalne dane i sygnaturę ? Jaki będzie wynik weryfikacji poprawności sygnatury ? Odpowiedź uzasadnij.

  • Jeśli atakujący podmieni klucz publiczny użytkownika maszyny B na swój własny klucz publiczny, wówczas, pomimo że użytkownik maszyny A może podpisać wiadomość poprawnie, użytkownik maszyny B nie będzie w stanie zweryfikować podpisu, ponieważ użyje klucza publicznego atakującego, a nie właściwego klucza publicznego użytkownika maszyny B.
  • Weryfikacja zawsze zakończy się niepowodzeniem, ponieważ atakujący nie zna klucza prywatnego użytkownika maszyny B, więc nie będzie mógł wygenerować prawidłowej sygnatury pasującej do oryginalnych danych.
  • W wyniku weryfikacji podpisu przez atakującego, który będzie używał swojego klucza publicznego, zawsze będzie otrzymywał komunikat o błędzie — podpis nie będzie pasować do danych.

Zadanie 7

1. U ż ytkownik maszyny A wysyła swój klucz publiczny użytkownikowi maszyny B
2. U ż yt k ownik maszyny B generuje losowy ciąg znaków I zapisuje go w pliku o nazwie “random”. N astępnie szyfruje go kluczem publicznym użytkownika maszyny A (otrzymany w kroku nr 1). Wynik zapisuje w pliku o nazwie “challenge”. Zapisz składnię polecenia koniecznego do wykonania tego kroku (szyfrowania). Wykorzystaj komendy openssl: rand i pkeyutl.
3. U żytkownik maszyny B wysyła plik “challenge” do użytkownika maszyny A.
4. Użytkownik maszyny A odszyfrowuje wiadomość zapisaną w pliku “challenge” a następnie tekst jawny odsyła użytkownikowi maszyny B (napisz składnię polecenia do odszyfrowania wiadomości). Odszyfrowaną wiadomość z pliku challenge zapisz w pliku o nazwie “response”.
5. Użytkownik maszyny B porównuje wiadomość oryginalną oraz odpowiedź (response) na challenge odebraną od użytkownika maszyny A. Do porównania można użyć polecenia “diff b”

Realizacja

root@WSL:lab6_pliki> #polecenia sa udawane gdyz cwiczenie jest robione na jednej maszynie ale nie zmienia to wnioskow oraz przbiegu cwiczenia
root@WSL:lab6_pliki> #scp rsa.pubkey userB@machineB:/home/userB/
root@WSL:lab6_pliki> openssl rand -out random 32
root@WSL:lab6_pliki> openssl pkeyutl -encrypt -pubin -inkey rsa.pubkey -in random -out challenge
root@WSL:lab6_pliki> #scp challenge userA@machineA:/home/userA/
root@WSL:lab6_pliki> openssl pkeyutl -decrypt -inkey rsa.key -in challenge -out response
root@WSL:lab6_pliki> diff random response
root@WSL:lab6_pliki>

Pytania

Zakładając poprawność (autentyczność) kluczy podaj jakie widzisz jakie słabości w protokole “challenge response” opisanym powyżej.

  1. Brak uwierzytelniania klucza publicznego:

Klucz publiczny użytkownika maszyny A jest przekazywany bez żadnej weryfikacji. Jeśli atakujący przechwyci ten klucz, może go podmienić na swój klucz publiczny. W takim przypadku użytkownik maszyny B zaszyfruje swoje dane za pomocą klucza publicznego atakującego, co pozwala mu na odszyfrowanie wiadomości przez atakującego, a nie przez prawdziwego użytkownika maszyny A.

  1. Brak użycia certyfikatów:

Klucz publiczny użytkownika A nie jest weryfikowany przez zaufaną stronę trzecią (np. w systemie opartym na certyfikatach). Może to prowadzić do ataku typu „man-in-the-middle”, gdzie atakujący może przechwycić komunikację i podmienić klucz publiczny, uniemożliwiając prawidłową weryfikację.

  1. Brak mechanizmu sprawdzania integralności:

Protokół nie zapewnia żadnej formy sprawdzania integralności przesyłanych danych. Jeśli wiadomości zostaną zmodyfikowane po wysłaniu przez użytkownika maszyny A, użytkownik maszyny B nie będzie w stanie wykryć, że dane zostały zmienione, ponieważ nie ma żadnej formy hashowania lub podpisywania wiadomości.

Jakie są możliwe rozwiązania ?

  1. Weryfikacja klucza publicznego:

Zamiast przesyłać klucz publiczny bezpośrednio, użytkownik maszyny A może wysłać swój klucz publiczny przez zaufaną stronę trzecią (np. serwer certyfikatów). Dzięki temu użytkownik maszyny B może upewnić się, że klucz publiczny pochodzi rzeczywiście od użytkownika maszyny A. Można również użyć protokołów takich jak TLS, aby zapewnić, że komunikacja między maszynami jest szyfrowana i chroniona przed podsłuchiwaniem.

  1. Podpisy cyfrowe dla kluczy publicznych:

Można użyć podpisów cyfrowych, aby upewnić się, że klucz publiczny użytkownika maszyny A jest autentyczny i pochodzi z wiarygodnego źródła. Użytkownik maszyny B może wtedy zweryfikować podpis, aby upewnić się, że klucz publiczny jest autentyczny.

  1. Wykorzystanie certyfikatów:

Używanie certyfikatów X.509 do podpisania kluczy publicznych oraz weryfikacji to dobra praktyka w przypadku takich protokołów. Certyfikat można zweryfikować przy użyciu wbudowanych zaufanych urzędów certyfikacji (CA), co daje pewność, że klucz publiczny należy do odpowiedniego użytkownika.

  1. Zastosowanie funkcji skrótu i podpisu:

Aby zapewnić integralność wiadomości, warto zastosować funkcję skrótu (np. SHA-256) i podpisać wiadomość przed jej wysłaniem. Użytkownik maszyny B mógłby wtedy porównać podpisaną wiadomość z jej wersją po odszyfrowaniu. To pozwala upewnić się, że wiadomość nie została zmodyfikowana w trakcie transmisji.

  1. Użycie bezpiecznego kanału komunikacji:

Warto rozważyć użycie bezpiecznego kanału komunikacji, jak np. TLS, w celu wymiany kluczy publicznych oraz zapewnienia prywatności i integralności danych.

notatki/szyfrowanie_assymetric.1746916591.txt.gz · ostatnio zmienione: przez administrator