Wickr-Crypto-C est une mise en œuvre du protocole de messagerie Secure Wickr en C, qui fournit une plate-forme pour les communications sécurisées sur tous les produits Wickr.
Un livre blanc décrivant les détails du protocole et de son modèle de sécurité se trouve ici. Une version Markdown du livre blanc se trouve également dans le wiki.
Veuillez noter
Cette Crypto Lib est publiée pour un examen public à des fins éducatives, académiques et d'audit de code uniquement (* Ce n'est pas une licence open source, plus sur la licence ici). Nous croyons fermement à la valeur du mouvement open source et nous sommes impatients de collaborer avec la communauté sur ce projets et d'autres projets, y compris sous la licence GNU.
Veuillez garder le suivi du problème de ce dépôt limité aux bogues de niveau de code trouvés dans l'implémentation du protocole comme décrit dans le livre blanc. Les demandes de traction sont toujours les bienvenues!
Toutes les questions concernant le protocole lui-même (c'est-à-dire: idées de conception de crypto, suggestions, critique conceptuelle de haut niveau) peut être dirigée vers [email protected].
Pour tous les autres problèmes de sécurité, veuillez contacter le programme Boug Bounty de Wickr ici.
En commençant par cette crypto lib, Wickr ouvre son code source à ses clients, partenaires et dans la communauté plus large - voilà pourquoi:
Transparence: il est important pour nous de partager avec les clients professionnels de Wickr comment la crypto Wickr est conçue de manière facile à réviser
Sécurité: Bien que Wickr ne soit pas un nouvel outil pour la messagerie éphémère cryptée peer-to-peer, ce protocole représente une crypto de nouvelle génération dans les produits Wickr. Nous sommes convaincus que la communauté Github aura des idées et des suggestions constructives sur la façon dont nous pouvons faire évoluer notre protocole pour le rendre plus fort contre les attaques émergentes (et, bien sûr, corriger un ou deux bogues)
Équipe: L'équipe de crypto de base a longtemps été un ardent défenseur interne pour l'ouverture du code source, et ils ont finalement prévalu ☺. Blague à part, nous pensons que c'est un bon moment dans le développement de Wickr en tant qu'entreprise pour partager la crypto de base avec le public en plus des audits de sécurité externes réguliers que tous les produits Wickr subissent
Une implémentation fidèle du protocole Wickr permet la confidentialité du contenu des messages en transit et en stockage. Il alimente les capacités suivantes:
Une structure qui représente un ensemble de fonctions cryptographiques que la bibliothèque peut utiliser. L'objectif de sa conception est d'exposer les primitives de sécurité d'une manière organisée et générique. Cela permet à la mise en œuvre du protocole de ne pas être liée à une seule dépendance telle que OpenSSL. Il est également conçu pour être facile à utiliser et pour fournir une interface de haut niveau qui applique les meilleures pratiques.
L'implémentation par défaut actuelle de Crypto Engine est basée principalement sur l'interface EVP à partir d'OpenSSL 1.1.0
Mise en œuvre de bas niveau du codage et du décodage des paquets de messages chiffrés
Interface de haut niveau pour gérer un point de terminaison qui peut envoyer et recevoir des paquets de messages chiffrés. C'est ainsi que les applications client frontal s'intègrent à la bibliothèque Crypto.
Une machine d'état pour aider à le cryptage de flux continus de données. Ceci est utilisé pour le codage / décodage des données dans un flux vocal / vidéo en direct entre les utilisateurs sur un 1: 1 ou une conférence téléphonique. Il est ensemencé avec une clé qui a été négociée avant par le protocole de messagerie. Chaque flux de données dans un appel particulier a son propre objet Stream_Cipher pour maintenir son état.
La bibliothèque est construite avec CMake sur toutes les plates-formes. Actuellement, iOS, Android, Windows, MacOS et Linux sont pris en charge. Voir les instructions spécifiques à la plate-forme et les options CMake ci-dessous pour plus d'informations
La construction macOS peut être configurée suit:
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=USER_INSTALL_LOCATION ../
La version Windows peut être configurée à l'aide du générateur MSVC comme suit
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=USER_INSTALL_LOCATION -G "Visual Studio 14 2015" ..
La version Windows ne peut pas être générée avec la commande standard make documentée ci-dessous. Au lieu de cela, il s'appuie directement sur les commandes Visual Studio comme suit:
msbuild WickrCryptoC.sln /p:Configuration=Release
Pour exécuter des tests, appelez ce qui suit dans le répertoire de construction
ctest
Pour installer la bibliothèque sur le préfixe d'installation configuré
msbuild INSTALL.vcxproj /p:Configuration=Release
La version Linux peut être configurée à l'aide du flux Cmake standard avec quelques options
mkdir build
cd build
-DCMAKE_BUILD_TYPE=Release
-DCMAKE_INSTALL_PREFIX=USER_INSTALL_LOCATION ../
Actuellement, le projet CMake a été testé sur ARMEBI-V7A, ARMEBI et X86 ABIS. Les tests d'exécution pour Android ne sont actuellement pas directement pris en charge par CMake, bien que la cible de test puisse être compilée et téléchargée sur un appareil via ADB manuellement
Le niveau d'API Android par défaut est 18 tel que défini dans le fichier Toolchain android.cmake dans le répertoire racine. Modifier ceci n'est actuellement pas recommandé
Pour configurer CMake pour la construction de la cible Android NDK, vous pouvez effectuer ce qui suit:
mkdir build
cd build
cmake -DCMAKE_TOOLCHAIN_FILE=../Toolchain-Android.cmake
-DCMAKE_ANDROID_NDK=USER_NDK_LOCATION
-DCMAKE_ANDROID_ARCH_ABI=OUTPUT_ARCH_AB
-DCMAKE_BUILD_TYPE=Release
-DCMAKE_INSTALL_PREFIX=USER_INSTALL_LOCATION ../
Une chaîne d'outils fournie peut prendre en charge les builds de simulateur et d'appareil pour iOS> 9,0 en tant que bibliothèques grasses. Les bibliothèques FAT x86 + x86_64 sont générées pour les bibliothèques Simulator et ARMV7, ARMV7S et ARM64 sont créées pour l'appareil
Pour configurer CMake pour la construction de la cible SDK iOS, vous pouvez effectuer ce qui suit:
cmake -DCMAKE_TOOLCHAIN_FILE=../Toolchain-iOS.cmake
-DCMAKE_BUILD_TYPE=Release
-DIOS_PLATFORM=OS|SIMULATOR
-DIOS_DEPLOYMENT_TARGET=9.0
-DCMAKE_INSTALL_PREFIX=USER_INSTALL_LOCATION ../
| Option cmake | Description | Cible |
|---|---|---|
| Fips | Indique à Cmake de construire AWS_LC en mode FIPS. | Tous |
| Cmake_build_type | Version ou débogage de débogage | Tous |
| Cmake_install_prefix | L'emplacement pour installer les en-têtes et les bibliothèques construites lors make install est appelée | Tous |
| Cmake_toolchain_file | Indique à Cmake de cibler la chaîne d'outils Android NDK Cross Compile | Android / iOS |
| Cmake_android_arch_abi | L'ABI cible pour cette construction. Les valeurs prises en charge sont ARMEBI, ARMEBI-V7A, x86 | Androïde |
| Cmake_android_ndk | L'emplacement du répertoire racine d'une installation NDK | Androïde |
| IOS_PLATFORM | Défini sur OS pour ARMV7, ARMV7S, ARM64 Builds ou Simulator pour X86, X86_64 Builds | ios |
| IOS_DEPLOYMENT_TARGET | La cible minimum pour la construction iOS (9,0+ recommandée) | ios |
| Build_tests | Raconte à Cmake aux tests BUID (OFF par défaut) | Tous |
Remarque: Pour les versions Windows, voir la section Windows
Pour construire la bibliothèque
make
Pour installer la bibliothèque sur le préfixe d'installation configuré
make install
Pour exécuter la cible de test groupée (macOS, Windows, Linux). Nécessite -DBUILD_TESTS=ON lors de la configuration de la construction.
make test
Copyright © 2012-2017 Wickr Inc. Tous droits réservés.
Ce code est publié uniquement à des fins éducatives, académiques et d'examen du code. L'utilisation commerciale du code est expressément interdite. Pour plus de détails, veuillez consulter la licence.
Le code est mis à disposition "tel quel" et sans aucune garantie expresse ou implicite quant à la forme physique, à la qualité marchande, à la non-contrefaçon ou autrement. Il n'est pas fourni dans le commerce mais sur une base volontaire au nom de la part de l'auteur au profit du titulaire de licence et n'est pas mis à disposition pour une utilisation des consommateurs ou toute autre utilisation en dehors des termes de cette licence. Toute personne accédant au code devrait avoir l'expertise requise pour sécuriser son système et ses appareils et pour accéder et utiliser le code à des fins d'examen uniquement. Le titulaire de licence présente le risque d'accéder et d'utiliser le code. En particulier, l'auteur n'a aucune responsabilité pour toute interférence avec un effet défavorable qui peut se produire à la suite de l'accès et / ou de l'utilisation du code du licencié.
Cette distribution comprend des logiciels cryptographiques. Le pays dans lequel vous résidez actuellement peut avoir des restrictions sur l'importation, la possession, l'utilisation et / ou la réexportation d'un autre pays, de logiciels de chiffrement. Avant d'utiliser un logiciel de chiffrement, veuillez vérifier les lois, réglementations et politiques de votre pays concernant l'importation, la possession, l'utilisation et la réexportation du logiciel de chiffrement, pour voir si cela est autorisé. Voir http://www.wassenaar.org/ pour plus d'informations.
Le Département du gouvernement américain du commerce, Bureau de l'industrie et de la sécurité (BIS), a classé ce logiciel comme numéro de contrôle des produits d'exportation (ECCN) 5D002.C.1, qui comprend un logiciel de sécurité de l'information en utilisant ou en remplissant des fonctions cryptographiques avec des algorithmes asymétriques. Le formulaire et la manière de cette distribution le rend éligible à l'exception de l'exception de la licence ENC Software non restreint (TSU) (voir le Règlement sur l'administration des exportations BIS, article 740.13) pour le code d'objet et le code source.