Narzędzia użytkownika

Narzędzia witryny


notatki:szyfrowanie_assymetric

Security: 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.txt · ostatnio zmienione: 2025/05/16 17:26 przez administrator