
Libreria C per prototipare e sperimentare con la crittografia resistente ai computer quantistici
liboqs è una libreria C open source per algoritmi crittografici quantum-safe.
liboqs fornisce:
liboqs fa parte del progetto Open Quantum Safe (OQS), che mira a sviluppare e integrare nelle applicazioni la crittografia quantum-safe per facilitare la distribuzione e i test in contesti reali. In particolare, OQS fornisce integrazioni prototipo di liboqs in protocolli come TLS, X.509 e S/MIME, tramite il nostro OpenSSL 3 Provider, e offriamo una varietà di altre demo abilitate al post-quantum.
Il progetto OQS è supportato dalla Post-Quantum Cryptography Alliance come parte della Linux Foundation. Ulteriori informazioni sul progetto Open Quantum Safe sono disponibili su openquantumsafe.org.
OQS sta conducendo un sondaggio per comprendere meglio la nostra comunità. Vorremmo sentire organizzazioni e individui riguardo al loro interesse e utilizzo del progetto Open Quantum Safe. Si prega di dedicare qualche minuto per compilare il sondaggio: https://linuxfoundation.surveymonkey.com/r/oqssurvey
La tabella seguente riassume ogni famiglia di algoritmi attualmente integrata in liboqs. Per i dettagli per variante (inclusi livello NIST, stato di tempo costante, verifica formale e ottimizzazioni disponibili), vedere ALGORITHMS.md; per fonti upstream e avvisi, vedere le pagine per singolo algoritmo in docs/algorithms.
I nomi degli algoritmi standardizzati da NIST — ML-KEM, ML-DSA e SLH-DSA — sono stabili; se NIST modifica i dettagli implementativi, liboqs si adeguerà affinché gli utenti siano protetti da tali modifiche. Tutti gli altri nomi sono soggetti a modifiche. Quali algoritmi vengono compilati può essere controllato tramite OQS_ALGS_ENABLED; per impostazione predefinita, liboqs viene compilato supportando ogni algoritmo nella tabella, inclusi quelli sperimentali.
Sebbene al momento della stesura di questo documento non siano note vulnerabilità in nessuno degli algoritmi quantum-safe utilizzati in questa libreria, si consiglia cautela nella distribuzione di algoritmi quantum-safe, poiché la maggior parte degli algoritmi e dei software non è stata sottoposta allo stesso grado di scrutinio degli algoritmi attualmente distribuiti. Particolare attenzione dovrebbe essere prestata alle indicazioni fornite dalla comunità degli standard, in particolare dal progetto NIST Post-Quantum Cryptography Standardization. Con l'avanzare della ricerca, gli algoritmi supportati possono subire rapidi cambiamenti nella loro sicurezza e potrebbero persino rivelarsi insicuri sia contro computer classici che quantistici. Inoltre, si noti che sntrup761 è incluso solo per test di interoperabilità.
liboqs non intende "scegliere i vincitori": il supporto degli algoritmi è informato dal progetto di standardizzazione NIST PQC. Raccomandiamo vivamente che applicazioni e protocolli si affidino ai risultati di questo sforzo quando distribuiscono crittografia post-quantum.
Siamo consapevoli che alcune parti potrebbero voler distribuire crittografia quantum-safe prima della conclusione del progetto di standardizzazione NIST PQC. Raccomandiamo vivamente che tali tentativi facciano uso della cosiddetta crittografia ibrida, in cui gli algoritmi a chiave pubblica quantum-safe vengono utilizzati insieme agli algoritmi a chiave pubblica tradizionali (come RSA o curve ellittiche), così che la soluzione sia almeno non meno sicura della crittografia tradizionale esistente.
NON RACCOMANDIAMO ATTUALMENTE DI AFFIDARSI A QUESTA LIBRERIA IN UN AMBIENTE DI PRODUZIONE O PER PROTEGGERE QUALSIASI DATO SENSIBILE. Questa libreria è pensata per aiutare nella ricerca e nella prototipazione. Sebbene facciamo uno sforzo per evitare bug di sicurezza, questa libreria non ha ricevuto il livello di audit e analisi necessario per potersi affidare ad essa per usi ad alta sicurezza.
Si prega di consultare SECURITY.md per i dettagli su come segnalare una vulnerabilità e sul processo di risposta alle vulnerabilità di OQS.
Per ottimizzare lo sforzo di supporto,
Installare le dipendenze:
Su Ubuntu:
sudo apt install astyle cmake gcc ninja-build libssl-dev unzip xsltproc doxygen graphviz valgrind
python3 -m venv .venv
source .venv/bin/activate
pip install --require-hashes -r requirements.txt
Su macOS, utilizzando un gestore di pacchetti a scelta (abbiamo scelto Homebrew):
brew install cmake ninja openssl@3 wget doxygen graphviz astyle valgrind
python3 -m venv .venv
source .venv/bin/activate
pip install --require-hashes -r requirements.txt
Usando Nix:
nix develop
Nota che, se vuoi che liboqs usi OpenSSL per vari algoritmi crittografici simmetrici (AES, SHA-2, ecc.), devi avere OpenSSL installato (consigliata la versione 3.x; anche la versione EOL 1.1.1 è ancora possibile).
Ottieni il codice sorgente:
git clone -b main https://github.com/open-quantum-safe/liboqs.git
cd liboqs
e compila:
mkdir build && cd build
cmake -GNinja ..
ninja
Sono disponibili varie opzioni di build cmake per personalizzare gli artefatti risultanti e sono documentate in CONFIGURE.md. Tutte le opzioni supportate sono anche elencate nel file .CMake/alg-support.cmake e possono essere visualizzate eseguendo cmake -LAH -N .. nella directory build.
Le seguenti istruzioni presuppongono che ci troviamo in build.
Per impostazione predefinita, il risultato principale della build è lib/liboqs.a, una libreria statica. Se vuoi compilare una libreria condivisa/dinamica, aggiungi -DBUILD_SHARED_LIBS=ON al comando cmake -GNinja .. sopra e il risultato sarà lib/liboqs.so|dylib|dll. Gli header pubblici si trovano nella directory include. Ci sono anche vari programmi compilati nella directory tests:
test_kem: semplice harness di test per i meccanismi di incapsulamento delle chiavitest_sig: semplice harness di test per gli schemi di firmatest_sig_stfl: semplice harness di test per gli schemi di firma con statotest_kem_mem: semplice harness di test per verificare il consumo di memoria dei meccanismi di incapsulamento delle chiavitest_sig_mem: semplice harness di test per verificare il consumo di memoria degli schemi di firmaI binari possono essere generati usando Visual Studio 2019 con l'estensione CMake Tools installata. Le stesse opzioni spiegate sopra per Linux/macOS possono essere utilizzate e gli artefatti di build vengono generati nelle cartelle build specificate.
Se vuoi creare file di build di Visual Studio, ad esempio se non usi ninja, assicurati di non passare il parametro -GNinja al comando cmake come esemplificato sopra. Puoi quindi compilare tutti i componenti usando msbuild, ad esempio come segue: msbuild ALL_BUILD.vcxproj e installare tutti gli artefatti usando ad esempio questo comando msbuild INSTALL.vcxproj.
Puoi compilare in modo incrociato liboqs per varie piattaforme. Informazioni dettagliate sono disponibili nel Wiki.
Informazioni più dettagliate sulla compilazione, sui parametri di build opzionali, sulle applicazioni di esempio, sulle convenzioni di codifica e altro si trovano nel wiki.
I contributi che soddisfano i criteri di accettazione sono accolti con gratitudine. Vedi la nostra Guida ai contributi per maggiori dettagli.
liboqs è concesso in licenza sotto la MIT License; vedi LICENSE.txt per i dettagli.
liboqs include alcune librerie o moduli di terze parti concessi in licenza in modo diverso; la sottocartella corrispondente contiene la licenza che si applica in quel caso. In particolare:
.CMake/CMakeDependentOption.cmake: BSD 3-Clause Licensesrc/common/common.c: include porzioni sotto Apache License v2.0src/common/crypto/aes/aes_c.c: pubblico dominio o qualsiasi licenza approvata OSIsrc/common/crypto/aes/aes*_ni.c: pubblico dominiosrc/common/crypto/sha2/sha2_c.c: pubblico dominiosrc/common/crypto/sha3/xkcp_low : CC0 (pubblico dominio), eccetto brg_endian.h e KeccakP-1600-AVX2.ssrc/common/crypto/sha3/xkcp_low/.../brg_endian.h : BSD 3-Clause Licensesrc/common/crypto/sha3/xkcp_low/.../KeccakP-1600-AVX2.s : licenza simile a BSD CRYPTOGAMS licensesrc/common/rand/rand_nist.c: vedi fileIl progetto OQS è supportato dalla Post-Quantum Cryptography Alliance come parte della Linux Foundation.
Il progetto OQS è stato fondato da Douglas Stebila e Michele Mosca all'Università di Waterloo. I contributori di liboqs includono singoli contributori, accademici e ricercatori, e varie aziende, tra cui Amazon Web Services, Cisco Systems, evolutionQ, IBM Research, Microsoft Research, SandboxAQ e softwareQ.
Il supporto finanziario per lo sviluppo di Open Quantum Safe è stato fornito da Amazon Web Services, il Canadian Centre for Cyber Security, Cisco, il Unitary Fund, il NGI Assure Fund e VeriSign Inc.
I progetti di ricerca che hanno sviluppato componenti specifici di OQS sono stati supportati da varie sovvenzioni di ricerca, inclusi finanziamenti dal Natural Sciences and Engineering Research Council of Canada (NSERC); vedi i documenti di origine per i riconoscimenti di finanziamento.
| Famiglia di algoritmi | Stato di standardizzazione | Implementazione principale | Manutenzione upstream | Livello OQS |
|---|
| BIKE | Non selezionato da NIST | awslabs/bike-kem | Da definire | Livello 3 (Community) |
| Classic McEliece | In considerazione ISO | PQClean/PQClean@1eacfda | Nessuna manutenzione attiva | Livello 3 (Community) |
| FrodoKEM | In considerazione ISO | microsoft/PQCrypto-LWEKE@a2f9dec | Miglior sforzo | Livello 2 (Supportato) |
| HQC | Selezionato da NIST per la prossima standardizzazione | pqc-hqc/hqc@161cd4f | Da definire | Livello 2 (Supportato) |
| Kyber | Selezionato da NIST come base per ML-KEM (FIPS 203) | pq-crystals/kyber@441c051 | Attivamente mantenuto | Livello 3 (Community) |
| ML-KEM | Standardizzato da NIST | pq-code-package/mlkem-native@0ba906c | Attivamente mantenuto | Livello 1 (Core) |
| NTRU | Non selezionato da NIST, in considerazione di standardizzazione da NTT | PQClean/PQClean@4c9e5a3 | Attivamente mantenuto | Livello 3 (Community) |
| NTRU-Prime | Non selezionato da NIST | openssh/openssh-portable | Attivamente mantenuto | Livello 3 (Community) |
| Famiglia di algoritmi | Stato di standardizzazione | Implementazione principale | Manutenzione upstream | Livello OQS |
|---|
| CROSS | In considerazione NIST | CROSS-signature/CROSS-lib-oqs@179d61b | Attivamente mantenuto | Livello 3 (Community) |
| Falcon | Selezionato da NIST per la prossima standardizzazione | PQClean/PQClean@1eacfda | Da definire | Livello 3 (Community) |
| MAYO | In considerazione NIST | PQCMayo/MAYO-C@64e15c6 | Attivamente mantenuto | Livello 3 (Community) |
| ML-DSA | Standardizzato da NIST | pq-code-package/mldsa-native@9b0ee84 | Attivamente mantenuto | Livello 2 (Supportato) |
| MQOM | In considerazione NIST | mqom/mqom-v2@ec6b7fa | Attivamente mantenuto | Livello 3 (Community) |
| SLH-DSA | Standardizzato da NIST | pq-code-package/slhdsa-c@a0fc1ff | Miglior sforzo | Livello 3 (Community) |
| SNOVA | In considerazione NIST | vacuas/SNOVA@1c3ca6f | Miglior sforzo | Livello 3 (Community) |
| UOV | In considerazione NIST | pqov/pqov@33fa527 | Miglior sforzo | Livello 3 (Community) |
| Famiglia di algoritmi | Stato di standardizzazione | Implementazione principale | Manutenzione upstream | Livello OQS |
|---|
| LMS | Standardizzato da IRTF, approvato da NIST | cisco/hash-sigs | Miglior sforzo | Livello 2 (Supportato) |
| XMSS | Standardizzato da IRTF, approvato da NIST | XMSS/xmss-reference | Attivamente mantenuto | Livello 2 (Supportato) |
kat_kem: programma che genera valori di test a risposta nota (KAT) per i meccanismi di incapsulamento delle chiavi utilizzando la stessa procedura dei requisiti di invio NIST, per il confronto con i valori KAT inviati usando tests/test_kat.pykat_sig: programma che genera valori di test a risposta nota (KAT) per gli schemi di firma utilizzando la stessa procedura dei requisiti di invio NIST, per il confronto con i valori KAT inviati usando tests/test_kat.pykat_sig_stfl: programma per verificare i risultati rispetto ai valori KAT inviati usando tests/test_kat.pyspeed_kem: programma di benchmarking per i meccanismi di incapsulamento delle chiavi; vedi ./speed_kem --help per le istruzioni d'usospeed_sig: programma di benchmarking per i meccanismi di firma; vedi ./speed_sig --help per le istruzioni d'usospeed_sig_stfl: programma di benchmarking per i meccanismi di firma con stato; vedi ./speed_sig_stfl --help per le istruzioni d'usoexample_kem: esempio minimo eseguibile che mostra l'uso dell'API KEMexample_sig: esempio minimo eseguibile che mostra l'uso dell'API di firmaexample_sig_stfl: esempio minimo eseguibile che mostra l'uso dell'API di firma con statotest_aes, test_sha3: semplici harness di test per i sotto-componenti crittograficitest_portability: semplici harness di test per verificare la portabilità del codice tra CPU; richiede la presenza di qemu; il corretto funzionamento è validato solo su UbuntuLa suite di test completa può essere eseguita con
ninja run_tests
Per generare la documentazione HTML dell'API, esegui:
ninja gen_docs
Poi apri docs/html/index.html nel tuo browser web.
ninja install può essere eseguito per installare la libreria compilata e i file include in una posizione a scelta, che può essere specificata passando l'opzione -DCMAKE_INSTALL_PREFIX=<dir> a cmake in fase di configurazione. In alternativa, ninja package può essere eseguito per creare un pacchetto di installazione.
ninja uninstall può essere eseguito per rimuovere tutti i file di installazione.
src/kem/bike/additional: Apache License v2.0src/kem/classic_mceliece/pqclean_*: pubblico dominiosrc/kem/kyber/pqcrystals-*: pubblico dominio (CC0) o Apache License v2.0src/kem/kyber/pqclean_*: pubblico dominio (CC0), e pubblico dominio (CC0) o Apache License v2.0, e pubblico dominio (CC0) o MIT, e MITsrc/kem/kyber/libjade_* pubblico dominio (CC0) o Apache License v2.src/kem/ml_kem/mlkem-native_*: MIT o Apache License v2.0 o ISC Licensesrc/kem/ntru/pqclean_*: pubblico dominio (CC0)src/kem/ntruprime/sntrup761_openssh: pubblico dominiosrc/sig/mayo/*: Apache License v2.0src/sig/ml_dsa/pqcrystals-*: pubblico dominio (CC0) o Apache License v2.0