{"id":172755,"date":"2026-05-19T18:24:53","date_gmt":"2026-05-19T16:24:53","guid":{"rendered":"https:\/\/prohoster.info\/blog\/novosti-interneta\/ad-nihilum-0-4-3"},"modified":"2026-05-19T18:24:53","modified_gmt":"2026-05-19T16:24:53","slug":"ad-nihilum-0-4-3","status":"publish","type":"post","link":"https:\/\/prohoster.info\/fr\/blog\/news\/ad-nihilum-0-4-3","title":{"rendered":"Ad Nihilum 0.4.3","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>La version 0.4.3 d'Ad Nihilum a \u00e9t\u00e9 lanc\u00e9e \u2014 un service minimaliste pour l'\u00e9change de messages chiffr\u00e9s selon le principe \u00ab lu \u2014 br\u00fbl\u00e9 \u00bb, principalement ax\u00e9 sur le self-hosting.<\/p>\n<p>Le serveur agit simplement comme un stockage aveugle. Le chiffrement et le d\u00e9chiffrement se font exclusivement c\u00f4t\u00e9 client, dans le navigateur (via AES-GCM).<\/p>\n<h3>Caract\u00e9ristiques<\/h3>\n<ul>\n<li>chiffrement et d\u00e9chiffrement local, <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/fr\/server\/\"   title=\"serveur\" data-wpil-keyword-link=\"linked\">serveur<\/a> ne voit jamais la cl\u00e9;<\/li>\n<li>support d'une couche de chiffrement suppl\u00e9mentaire par mot de passe, dont (1) le serveur ne peut pas avoir connaissance, (2) ne peut pas \u00eatre d\u00e9duit \u00e0 partir du lien transmis;<\/li>\n<li>le projet contient environ 2200 lignes de code serveur en C et 600 lignes de code client en JS, ce qui facilite l'audit;<\/li>\n<li>Ad Nihilum d\u00e9pend uniquement de libmicrohttpd. Une version modifi\u00e9e de QRCode.js est fournie pour g\u00e9n\u00e9rer des codes QR;<\/li>\n<li>un guide pour configurer rapidement le service local sans IP externe est inclus;<\/li>\n<li>Ad Nihilum fonctionne \u00e9galement sur Android, un script correspondant est inclus pour la compilation dans Termux;<\/li>\n<li>serveur \u00e0 thread unique et synchrone.<\/li>\n<\/ul>\n<h3>Changements<\/h3>\n<h4>Refonte \u00e0 grande \u00e9chelle<\/h4>\n<ul>\n<li>Les pages d'envoi et de r\u00e9ception de messages ont \u00e9t\u00e9 s\u00e9par\u00e9es, le code client correspondant.<\/li>\n<li>Le design a \u00e9t\u00e9 consid\u00e9rablement modifi\u00e9 et ajust\u00e9 en fonction des demandes de la communaut\u00e9.<\/li>\n<li>Clients \u00ab simples \u00bb et locaux :\n<ul> <noindex><\/p>\n<li>un client avec un design simplifi\u00e9 a \u00e9t\u00e9 ajout\u00e9. <a rel=\"nofollow\" href=\"https:\/\/adnihilum.net\/simple\">https:\/\/adnihilum.net\/simple<\/a>;<\/li>\n<p><\/noindex> <\/p>\n<li>les pages clients peuvent \u00eatre enregistr\u00e9es localement et utilis\u00e9es depuis file:\/\/.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h4>Politiques des navigateurs<\/h4>\n<ul>\n<li>CSP int\u00e9gr\u00e9 pour lutter contre les XSS;<\/li>\n<li>le serveur envoie HSTS.<\/li>\n<\/ul>\n<h4>Autres modifications<\/h4>\n<ul>\n<li>le projet a \u00e9t\u00e9 renomm\u00e9 d'Epha-ots;<\/li>\n<li>le domaine adnihilum.net a \u00e9t\u00e9 acquis;<\/li>\n<li>TLS est assur\u00e9 gr\u00e2ce \u00e0 Let\u2019s Encrypt, il convient de le garder \u00e0 l'esprit (pas d'argent) ;<\/li>\n<li>le travail avec les fichiers a \u00e9t\u00e9 simplifi\u00e9;<\/li>\n<li>passage aux pointeurs fat;<\/li>\n<li>des bugs mineurs ont \u00e9t\u00e9 corrig\u00e9s;<\/li>\n<li>auto-jsminify et compilation des fichiers clients lors de la compilation via CMake.<\/li>\n<\/ul>\n<h3>Aper\u00e7u du protocole<\/h3>\n<p>G\u00e9n\u00e9rer trois valeurs al\u00e9atoires : cl\u00e9 <strong>K<\/strong>, vecteur d'initialisation <strong>N<\/strong> et sel <strong>S<\/strong>. <strong>K<\/strong> \u2014 256 bits, <strong>N<\/strong> \u2014 96 bits, <strong>S<\/strong> \u2014 128 bits.<\/p>\n<p>Afficher <strong>ID<\/strong> de <strong>K<\/strong> et <strong>S<\/strong> \u00e0 l'aide de HKDF bas\u00e9 sur SHA-256.<\/p>\n<p>Former une cha\u00eene de donn\u00e9es authentifi\u00e9es suppl\u00e9mentaires <strong>aad<\/strong> \u2014 c'est simplement une cha\u00eene de forme : id=ID<\/p>\n<p>Si l'utilisateur a d\u00e9fini un mot de passe :<\/p>\n<ul>\n<li>afficher <strong>Pk<\/strong> depuis le mot de passe et <strong>S<\/strong> \u00e0 l'aide de PBKDF2, SHA-256, 800000 it\u00e9rations;<\/li>\n<li>la m\u00eame sel est utilis\u00e9 pour tout;<\/li>\n<li>chiffrer les donn\u00e9es \u00e0 l'aide de AES-GCM, en utilisant la cl\u00e9 <strong>Pk<\/strong>, IV\/nonce <strong>N<\/strong> et transmettre <strong>aad<\/strong>.<\/li>\n<\/ul>\n<p>Ajouter une \u00e9tiquette de deux octets aux donn\u00e9es d\u00e9j\u00e0 chiffr\u00e9es, si un mot de passe \u00e9tait utilis\u00e9, ou aux donn\u00e9es source, si aucun mot de passe n'a \u00e9t\u00e9 utilis\u00e9.<\/p>\n<p>Le premier octet a de l'importance : il indique si les donn\u00e9es ont \u00e9t\u00e9 chiffr\u00e9es avec un mot de passe :<\/p>\n<ul>\n<li>0x73 \u2014 donn\u00e9es chiffr\u00e9es avec un mot de passe ;<\/li>\n<li>0x13 \u2014 donn\u00e9es non chiffr\u00e9es avec un mot de passe.<\/li>\n<\/ul>\n<p>Le deuxi\u00e8me octet est une valeur constante 0x37.<\/p>\n<p>Chiffrer \u00e0 nouveau le r\u00e9sultat avec AES-GCM, en utilisant le m\u00eame iv = N et le m\u00eame <strong>aad<\/strong>. Cela donne le texte chiffr\u00e9 final <strong>ct<\/strong>.<\/p>\n<p>Concat\u00e9ner les octets en une cha\u00eene : blob = N .. S .. ct<\/p>\n<p>Envoyer <strong>blob<\/strong> au serveur avec <strong>ID<\/strong>. Le serveur renvoie <strong>blob<\/strong> via cela <strong>ID<\/strong> et ne peut pas le remplacer : le client v\u00e9rifie d'abord <strong>ID<\/strong> \u00e0 l'aide de <strong>N<\/strong> et <strong>K<\/strong> encore avant le d\u00e9chiffrement, puis \u00e0 travers <strong>aad<\/strong>.<\/p>\n<p>Le client stocke <strong>K<\/strong>. <strong>K<\/strong> n'est jamais envoy\u00e9 au serveur. <strong>Pk<\/strong> n'est pas non plus envoy\u00e9 ; tout ce qui est li\u00e9 au mot de passe est purg\u00e9 de la m\u00e9moire.<\/p>\n<p>Le client forme un lien : origin\/#ID\/K<\/p>\n<p>Ici <strong>ID<\/strong> et <strong>K<\/strong> \u2014 cha\u00eenes au format base64url.<\/p>\n<p>Lorsque le destinataire ouvre le lien :<\/p>\n<ul>\n<li>le navigateur ignore tout ce qui commence par # ; cela s'appelle location.hash ;<\/li>\n<li>l'application client est charg\u00e9e depuis le serveur ;<\/li>\n<li>\u00e0 mon avis, c'est la principale vuln\u00e9rabilit\u00e9 : nous revenons en fait au fait que \u00ab TLS est trou\u00e9 \u00bb ;<\/li>\n<li>toutefois, rien n'emp\u00eache de garder le client hors ligne ;<\/li>\n<li>id\u00e9alement, il devrait y avoir un client autonome distinct.<\/li>\n<\/ul>\n<p>Le JavaScript client v\u00e9rifie location.hash, et si cela contient <strong>ID<\/strong> et <strong>K<\/strong>, il charge les donn\u00e9es depuis le serveur.<\/p>\n<p>Ensuite, il les v\u00e9rifie, les d\u00e9chiffre et, si n\u00e9cessaire, demande le mot de passe et d\u00e9chiffre \u00e0 nouveau.<\/p>\n<h3>Licence<\/h3>\n<p>Le projet est distribu\u00e9 sous GPLv3.<\/p>\n<p>Source : <a \ncontent=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/www.linux.org.ru\/news\/opensource\/18293734\">linux.org.ru<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0421\u043e\u0441\u0442\u043e\u044f\u043b\u0441\u044f \u0440\u0435\u043b\u0438\u0437 Ad Nihilum 0.4.3 \u2014 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u0434\u043b\u044f \u043e\u0431\u043c\u0435\u043d\u0430 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c\u0438 \u043f\u043e \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443 &laquo;\u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043b \u2014 \u0441\u0436\u0435\u0433&raquo;, \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043d\u0430 self-hosting. C\u0435\u0440\u0432\u0435\u0440 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u043b\u0438\u0448\u044c \u0432 \u0440\u043e\u043b\u0438 \u0433\u043b\u0443\u0445\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430. \u0428\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u0430, \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 (\u0447\u0435\u0440\u0435\u0437 AES-GCM). \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0432\u0438\u0434\u0438\u0442 \u043a\u043b\u044e\u0447\u0430; \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u044f [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":8,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[702],"tags":[],"class_list":["post-172755","post","type-post","status-publish","format-standard","hentry","category-news"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0421\u043e\u0441\u0442\u043e\u044f\u043b\u0441\u044f \u0440\u0435\u043b\u0438\u0437 Ad Nihilum 0.4.3 \u2014 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u0434\u043b\u044f \u043e\u0431\u043c\u0435\u043d\u0430 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c\u0438 \u043f\u043e \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443 \u00ab\u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043b \u2014 \u0441\u0436\u0435\u0433\u00bb, \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043d\u0430 self-hosting. C\u0435\u0440\u0432\u0435\u0440 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u043b\u0438\u0448\u044c \u0432 \u0440\u043e\u043b\u0438.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Erik Peterson\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/fr\/blog\/news\/ad-nihilum-0-4-3\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Ad Nihilum 0.4.3 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0421\u043e\u0441\u0442\u043e\u044f\u043b\u0441\u044f \u0440\u0435\u043b\u0438\u0437 Ad Nihilum 0.4.3 \u2014 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u0434\u043b\u044f \u043e\u0431\u043c\u0435\u043d\u0430 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c\u0438 \u043f\u043e \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443 \u00ab\u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043b \u2014 \u0441\u0436\u0435\u0433\u00bb, \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043d\u0430 self-hosting. C\u0435\u0440\u0432\u0435\u0440 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u043b\u0438\u0448\u044c \u0432 \u0440\u043e\u043b\u0438.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/fr\/blog\/news\/ad-nihilum-0-4-3\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2026-05-19T16:24:53+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2026-05-19T16:24:53+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Ad Nihilum 0.4.3 | ProHoster","description":"La version Ad Nihilum 0.4.3 a \u00e9t\u00e9 publi\u00e9e - un service minimaliste pour l'\u00e9change de messages chiffr\u00e9s sur le principe \u00ab lu - br\u00fbl\u00e9 \u00bb, destin\u00e9 principalement \u00e0 l'auto-h\u00e9bergement. Le serveur agit simplement comme.","canonical_url":"https:\/\/prohoster.info\/fr\/blog\/news\/ad-nihilum-0-4-3","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"fr_FR","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Ad Nihilum 0.4.3 | ProHoster","og:description":"\u0421\u043e\u0441\u0442\u043e\u044f\u043b\u0441\u044f \u0440\u0435\u043b\u0438\u0437 Ad Nihilum 0.4.3 \u2014 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u0434\u043b\u044f \u043e\u0431\u043c\u0435\u043d\u0430 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c\u0438 \u043f\u043e \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443 \u00ab\u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043b \u2014 \u0441\u0436\u0435\u0433\u00bb, \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043d\u0430 self-hosting. C\u0435\u0440\u0432\u0435\u0440 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u043b\u0438\u0448\u044c \u0432 \u0440\u043e\u043b\u0438.","og:url":"https:\/\/prohoster.info\/fr\/blog\/news\/ad-nihilum-0-4-3","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2026-05-19T16:24:53+00:00","article:modified_time":"2026-05-19T16:24:53+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":[],"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/172755","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=172755"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/172755\/revisions"}],"predecessor-version":[{"id":173166,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/172755\/revisions\/173166"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=172755"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=172755"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=172755"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}