193 lines
7.9 KiB
Markdown
193 lines
7.9 KiB
Markdown
# OpenSSL & liboqs & oqsprovider
|
|
|
|
## About
|
|
Tento priečinok obsahuje detailný postup inštalácie potrebných knižníc na sprístupnenie PQ algoritmov v OpenSSL 3.2 a vzorové aplikácie klienta a serveru, ktoré využívajú PQ algoritmy pri štandardnej TCP/IP komunikácii s využitím protokolu TLS 1.3.
|
|
|
|
## Building
|
|
Inštalované a testované na:
|
|
| Platform | OS | compiler | cmake | ninja |
|
|
|:-----------------:|:---------------------------:|:------------------------------------------------:|:-------:|:-------:|
|
|
| Linux | Ubuntu 22.04.3 LTS <br> (GNU/Linux 5.15.133.1-microsoft-standard-WSL2 x86_64) | gcc version 11.4.0 <br> (Ubuntu 11.4.0-1ubuntu1~22.04) | version 1.10.1 | version 3.22.1 |
|
|
| Windows | Windows 10.0.22631 | gcc version 13.2.0 20240107 <br> (MinGW-W64 x86_64-msvcrt-posix-seh) | version 1.11.1 | version 3.28.1 |
|
|
|
|
Verzie testovaných knižníc:
|
|
| OpenSSL | liboqs | oqs-provider |
|
|
|:-----------------:|:---------------------------:|:------------------------------------------------:|
|
|
| 3.3.0 | 0.10.0 | 0.6.0* |
|
|
* experimentálne testované na Windows platforme, na Linuxe sa nám to nepodarilo otestovať (posledná funkčná verzia 0.5.4-dev)
|
|
### :exclamation: **OpenSSL 3.2 je minimálna verzia OpenSSL, ktorá umožňuje využívať PQ algoritmy pri komunikácii** :exclamation:
|
|
|
|
|
|
### LINUX
|
|
#### 1. Inštalácia a konfigurácia OpenSSL 3.3
|
|
```
|
|
sudo apt install build-essential checkinstall -y
|
|
|
|
wget https://github.com/openssl/openssl/releases/download/openssl-3.3.0/openssl-3.3.0.tar.gz
|
|
tar -xvf openssl-3.3.0.tar.gz
|
|
cd openssl-3.3.0
|
|
./Configure
|
|
make
|
|
sudo make install
|
|
|
|
export PATH="/usr/local:$PATH"
|
|
export LD_LIBRARY_PATH="/usr/local/lib64:$PATH"
|
|
|
|
cd /etc/ld.so.conf.d/
|
|
sudo touch openssl-3.3.0.conf
|
|
echo "/usr/local/lib64" | sudo tee -a openssl-3.3.0.conf
|
|
sudo ldconfig -v
|
|
|
|
sudo apt install --reinstall ca-certificates
|
|
sudo update-ca-certificates -f
|
|
nano ~/.wgetrc
|
|
ca_certificate=/etc/ssl/certs/ca-certificates.crt
|
|
```
|
|
|
|
#### LIBOQS
|
|
```
|
|
sudo apt install astyle cmake ninja-build libssl-dev python3-pytest python3-pytest-xdist unzip xsltproc doxygen graphviz python3-yaml valgrind -y
|
|
wget https://github.com/open-quantum-safe/liboqs/archive/refs/tags/0.10.0.tar.gz
|
|
tar -xvf 0.10.0.tar.gz
|
|
cd cd liboqs-0.10.0
|
|
mkdir build && cd build
|
|
|
|
cmake -GNinja .. -DOPENSSL_ROOT_DIR=/usr/local/lib64 -DOQS_ALGS_ENABLED=ALL -DBUILD_SHARED_LIBS=ON
|
|
ninja
|
|
sudo ninja install
|
|
|
|
cd /etc/ld.so.conf.d/
|
|
sudo touch liboqs.conf
|
|
echo "/usr/local/lib" | sudo tee -a liboqs.conf
|
|
sudo ldconfig -v
|
|
```
|
|
|
|
#### OQS PROVIDER
|
|
```
|
|
wget https://github.com/open-quantum-safe/oqs-provider/archive/refs/tags/0.6.0.tar.gz
|
|
tar -xvf 0.6.0.tar.gz
|
|
|
|
cd oqs-provider-0.6.0
|
|
cmake -S . -B _build -DOPENSSL_ROOT_DIR=/usr/local/lib64 -Dliboqs_DIR=/usr/local -DBUILD_SHARED_LIBS=ON
|
|
cmake --build _build
|
|
sudo cmake --install _build
|
|
```
|
|
|
|
|
|
```
|
|
cd /usr/local/ssl/
|
|
sudo nano openssl.cnf
|
|
```
|
|
|
|
- po inštalácii pridáme do konfiguračného súboru *openssl.cnf* modul, ktorý permanentne aktivuje OQS provider a jeho funkcie pri používani OpenSSL
|
|
- `Note: Be sure to always activate the "default" provider`
|
|
- v prípade potreby je možné konfiguračný súbor nahradiť súborom z tohto priečinku
|
|
```
|
|
[provider_sect]
|
|
default = default_sect
|
|
oqsprovider = oqsprovider_sect
|
|
[oqsprovider_sect]
|
|
activate = 1
|
|
```
|
|
|
|
- overiť funkčnosť knižníc môžeme príkazom `openssl list -providers`, ktorý by nám mal vrátiť výsledok:
|
|
```
|
|
Providers:
|
|
default
|
|
name: OpenSSL Default Provider
|
|
version: 3.2.0
|
|
status: active
|
|
oqsprovider
|
|
name: OpenSSL OQS Provider
|
|
version: 0.5.4-dev
|
|
status: active
|
|
```
|
|
|
|
### WINDOWS
|
|
|
|
#### WinLibs gcc
|
|
- zo stránky [WinLibs GCC](https://winlibs.com) stiahneme .zip archív, rozbalíme ho a skopírujeme celú zložku na nami určené miesto
|
|
- prejdeme do *Settings-System-Advanced system settings-Environment Variables-System variables-Path-Edit* a pridáme cestu k priečinku s prekladačom, napríklad: `C:\mingw64\bin\`
|
|
- nastaviť cestu k prekladaču môžeme aj úpravou premennej v príkazovom riadku príkazom `SET PATH=\path\;%PATH%`, napríklad `SET PATH=C:\mingw64\bin\;%PATH%`
|
|
- v priečinku /bin/ sa nachádza aplikácia *mingw32-make.exe*, z ktorej si urobíme kópiu a premenujeme ju na *make.exe*
|
|
|
|
#### CMake
|
|
- ak z nejakého dôvodu nemôžeme použiť cmake priamo z WinLibs knižnice, tak ho môžeme stiahnuť z oficiálnej stránky - https://cmake.org/download/
|
|
|
|
#### OpenSSL (FireDaemon OpenSSL)
|
|
- v našom prípade sme využívali predkompilovanú verziu OpenSSL zo stránky [FireDaemon OpenSSL](https://kb.firedaemon.com/support/solutions/articles/4000121705)
|
|
- stiahneme .zip archív, rozbalíme ho a všetky priečinky z priečinku *x64* spolu s priečinkom *ssl* skopírujeme na nami vybrané miesto
|
|
- nastavíme cestu k aplikácii OpenSSL a konfiguračnému súboru prostredníctvom konzolových príkazov:
|
|
```
|
|
set OPENSSL_CONF=C:\openssl\ssl\openssl.cnf
|
|
set PATH=C:\openssl\bin;%PATH%
|
|
```
|
|
- z priečinku */bin/* skopírujeme súbory *libssl.lib* a *libcrypto.lib* do */lib/* priečinku nášho prekladača, v našom prípade teda do `C:\mingw64\lib\`
|
|
|
|
#### LIBOQS
|
|
- stiahneme .zip súbor knižnice liboqs z oficiálneho GITu - [liboqs](https://github.com/open-quantum-safe/liboqs)
|
|
- stiahnutý súbor rozbalíme na nami zvolené miesto
|
|
- následne knižnicu nainštalujeme týmito príkazmi:
|
|
```
|
|
cd liboqs-main
|
|
mkdir build
|
|
cd build
|
|
cmake -GNinja .. -DOQS_ALGS_ENABLED=ALL
|
|
ninja
|
|
ninja install
|
|
```
|
|
- po dokončení inštalácie skopírujeme vygenerované priečinky *include* a *lib* do zložky s našim gcc prekladačom, teda do *D:\mingw64\*
|
|
|
|
Poznámka: podľa nastavení systému môžu byť potrebné na vykonanie príkazu `ninja install` administrátorské práva
|
|
|
|
#### OQS-PROVIDER
|
|
- stiahneme .zip súbor knižnice oqs-provider z oficiálneho GITu - [oqsprovider](https://github.com/open-quantum-safe/oqs-provider)
|
|
- stiahnutý súbor rozbalíme na nami vybrané miesto
|
|
- v súbore *CMakeLists.txt* pridáme na riadok 90 a 91 pred funkcie *enable_testing()* a *add_subdirectory(test)* symbol `#`, ktorým zakomentujeme a nezrealizujeme kompiláciu testov - pri kompilácii testu *oqs_test_tlssig.c* by nám vyskočila chyba, ktorá by spôsobila, že by celá kompilácia knižnice spadla
|
|
```
|
|
cmake -GNinja -DOPENSSL_ROOT_DIR=C:\openssl -S . -B _build
|
|
cd _build
|
|
ninja
|
|
ninja install
|
|
```
|
|
Poznámka: chybu v teste *oqs_test_tlssig.c* môžeme opraviť aj doplnením podmienenej kompilácie pre MINGW64 kompilátor a úpravou problematickej definície funkcie *mkdir*, z ktorej odstránime druhý argument
|
|
|
|
- nastavíme cestu k vygenerovanému .DLL súboru: </br>
|
|
Powershell - `[Environment]::SetEnvironmentVariable("OPENSSL_MODULES", "C:\openssl\lib\ossl-modules\", "Machine")`</br>
|
|
cmd - `setx OPENSSL_MODULES "C:\openssl\lib\ossl-modules\"`
|
|
|
|
- po inštalácii všetkých knižníc pridáme do konfiguračného súboru *openssl.cnf* modul, ktorý permanentne aktivuje OQS provider a jeho funkcie pri používani OpenSSL
|
|
- `Note: Be sure to always activate the "default" provider`
|
|
- v prípade potreby je možné konfiguračný súbor nahradiť súborom z tohto priečinku
|
|
```
|
|
[provider_sect]
|
|
default = default_sect
|
|
oqsprovider = oqsprovider_sect
|
|
[oqsprovider_sect]
|
|
activate = 1
|
|
```
|
|
|
|
- overiť funkčnosť knižníc môžeme príkazom `openssl list -providers`, ktorý by nám mal vrátiť výsledok:
|
|
```
|
|
Providers:
|
|
default
|
|
name: OpenSSL Default Provider
|
|
version: 3.3.0
|
|
status: active
|
|
oqsprovider
|
|
name: OpenSSL OQS Provider
|
|
version: 0.6.0
|
|
status: active
|
|
```
|
|
|
|
## References
|
|
[OpenSSL](https://github.com/openssl/openssl)
|
|
|
|
[liboqs](https://github.com/open-quantum-safe/liboqs)
|
|
|
|
[oqsprovider](https://github.com/open-quantum-safe/oqs-provider)
|
|
|
|
[WinLibs GCC](https://winlibs.com)
|
|
|
|
[FireDaemon OpenSSL](https://kb.firedaemon.com/support/solutions/articles/4000121705)
|