MastersThesis/OpenSSL & oqsprovider
2024-02-20 12:10:25 +00:00
..
README.md update readme 2024-02-20 12:10:25 +00:00

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
(GNU/Linux 5.15.133.1-microsoft-standard-WSL2 x86_64)
gcc version 11.4.0
(Ubuntu 11.4.0-1ubuntu1~22.04)
version 1.10.1 version 3.22.1
Windows Windows 10.0.22631 gcc version 14.0.0 20240107 (experimental)
(MinGW-W64 x86_64-msvcrt-posix-seh)
version 1.11.1 version 3.28.1

OpenSSL 3.2 je minimálna verzia OpenSSL, ktorá umožňuje využívať PQ algoritmy pri komunikácii

LINUX

OpenSSL 3.2

sudo apt install build-essential checkinstall -y

git clone https://github.com/openssl/openssl.git

https://github.com/openssl/openssl/releases/download/openssl-3.2.0/openssl-3.2.0.tar.gz
tar -xvf openssl-3.2.0.tar.gz
cd openssl-3.2.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.2.0.conf
echo "/usr/local/lib64" | sudo tee -a openssl-3.2.0.conf
sudo ldconfig -v

LIBOQS

sudo apt install astyle cmake ninja-build libssl-dev python3-pytest python3-pytest-xdist unzip xsltproc doxygen graphviz python3-yaml valgrind -y
git clone https://github.com/open-quantum-safe/liboqs.git
cd liboqs/
mkdir build && cd build

cmake -GNinja .. -DBUILD_SHARED_LIBS=ON -DOPENSSL_ROOT_DIR=/usr/local/lib64 -DOQS_ALGS_ENABLED=ALL
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

git clone https://github.com/open-quantum-safe/oqs-provider.git
cd oqs-provider
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 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: D:\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=D:\mingw64\bin\;%PATH%
  • v priečinku /bin/ sa nachádza aplikácia mingw32-make.exe, ktorú si pre jednoduchšie používanie premenujeme na make.exe

CMake

  • zo stránky CMake v sekcii Binary distributions stiahneme Windows x64 ZIP súbor, ktorý rozbalíme na nami určené miesto
  • prejdeme do Settings-System-Advanced system settings-Environment Variables-System variables-Path-Edit a pridáme cestu k /bin/ priečinku, napríklad: D:\cmake-3.28.1-windows-x86_64\bin`
  • nastaviť cestu k súborom môžeme aj príkazom SET PATH, napríklad SET PATH=D:\cmake-3.28.1-windows-x86_64\bin\;%PATH%

OpenSSL (FireDaemon OpenSSL)

  • v našom prípade sme využívali predkompilovanú verziu OpenSSL zo stránky FireDaemon OpenSSL
  • stiahneme .zip archív, rozbalíme ho a priečinky x64 a ssl skopírujeme na nami vybrané miesto
  • prejdeme do priečinku ssl a súbor openssl.cnf skopírujeme do priečinku vyššie (k predošlým priečinkom x64 a ssl)
  • nastavíme cestu k aplikácii OpenSSL a konfiguračnému súboru prostredníctvom konzolových príkazov:
set OPENSSL_HOME=C:\Program Files\Common Files\FireDaemon SSL 3
set OPENSSL_CONF=%OPENSSL_HOME%\ssl\openssl.cnf
set PATH=%OPENSSL_HOME%\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 D:\mingw64\lib\

LIBOQS

  • stiahneme .zip súbor knižnice liboqs z oficiálneho GITu - 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 .. -DOPENSSL_ROOT_DIR='C:\Program Files\Common Files\FireDaemon SSL 3\bin\' -DOQS_ALGS_ENABLED=ALL -DCMAKE_C_LINK_LIBRARY_FLAG="-lssl -lcrypto"
ninja
ninja install

Poznámka: premennú OPENSSL_ROOT_DIR je potrebné definovať ak sme OpenSSL umiestnili na iný disk než na aký inštalujeme liboqs, cmake nás informuje či bola manuálne nastavená premenná ignorovaná

Poznámka2: vo vygenerovanom súbore cmake_install.cmake sa nachádza premenná set(CMAKE_INSTALL_PREFIX), ktorá umožňuje zmeniť miesto inštalácie celej knižnice

Poznámka3: 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
  • 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:\Program Files\Common Files\FireDaemon SSL 3" -Dliboqs_DIR=d:\liboqs\lib\cmake\liboqs\ -S . -B _build -DBUILD_SHARED_LIBS=OFF
cd _build
ninja
ninja install

Poznámka: premennú OPENSSL_ROOT_DIR je potrebné definovať ak sme OpenSSL umiestnili na iný disk než na aký inštalujeme liboqs, cmake nás informuje či bola manuálne nastavená premenná ignorovaná

Poznámka2: cmake nás môže upozorniť na to, že nenašiel v našom systéme knižnicu liboqs, čo sa môže stať, ak sme pri inštalácii knižnice liboqs zmenili premennú CMAKE_INSTALL_PREFIX. cmake nás upozorní na to, že premenná liboqs_DIR musí obsahovať cestu k súboru liboqsTargets.cmake

Poznámka3: 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

  • 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.2.0
    status: active
  oqsprovider
    name: OpenSSL OQS Provider
    version: 0.5.4-dev
    status: active

References

OpenSSL

liboqs

oqsprovider

WinLibs GCC

CMake

FireDaemon OpenSSL