{"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\/sv\/blog\/news\/ad-nihilum-0-4-3","title":{"rendered":"Ad Nihilum 0.4.3","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Ad Nihilum 0.4.3 har sl\u00e4ppts \u2013 en minimalistisk tj\u00e4nst f\u00f6r att utbyta krypterade meddelanden enligt principen \u00abl\u00e4st \u2013 br\u00e4nt\u00bb, som fr\u00e4mst \u00e4r inriktad p\u00e5 self-hosting.<\/p>\n<p>Servern fungerar endast som en passiv lagringsplats. Kryptering och dekryptering sker uteslutande p\u00e5 klientsidan, i webbl\u00e4saren (via AES-GCM).<\/p>\n<h3>Egenskaper<\/h3>\n<ul>\n<li>lokal kryptering och dekryptering, <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/sv\/server\/\"   title=\"server\" data-wpil-keyword-link=\"linked\">server<\/a> ser aldrig nyckeln;<\/li>\n<li>st\u00f6d f\u00f6r ett extra lager av kryptering med ett l\u00f6senord, som (1) servern inte kan k\u00e4nna till, (2) inte kan avsl\u00f6jas genom den \u00f6verf\u00f6rda l\u00e4nken;<\/li>\n<li>projektet inneh\u00e5ller cirka 2200 rader serverkod p\u00e5 C och 600 rader klientkod p\u00e5 JS, vilket f\u00f6renklar granskningen;<\/li>\n<li>Ad Nihilum \u00e4r endast beroende av libmicrohttpd. F\u00f6r att generera QR-koder levereras en modifierad version av QRCode.js;<\/li>\n<li>en snabbguide f\u00f6r att starta en lokal tj\u00e4nst utan extern IP inkluderas;<\/li>\n<li>Ad Nihilum fungerar \u00e4ven p\u00e5 Android, med ett motsvarande skript som medf\u00f6ljer f\u00f6r byggnation i Termux;<\/li>\n<li>entr\u00e5dad och synkroniserad server.<\/li>\n<\/ul>\n<h3>\u00c4ndringar<\/h3>\n<h4>Stor omdesign<\/h4>\n<ul>\n<li>Sidorna f\u00f6r att skicka och ta emot meddelanden har delats upp, med motsvarande klientkod.<\/li>\n<li>\u00d6verlag har designen f\u00f6r\u00e4ndrats och justerats med h\u00e4nsyn till \u00f6nskem\u00e5l fr\u00e5n anv\u00e4ndarna.<\/li>\n<li>\u00abEnkel\u00bb och lokal klienter:\n<ul> <noindex><\/p>\n<li>en klient med f\u00f6renklad design har lagts till <a rel=\"nofollow\" href=\"https:\/\/adnihilum.net\/simple\">https:\/\/adnihilum.net\/simple<\/a>;<\/li>\n<p><\/noindex> <\/p>\n<li>klient sidor kan sparas lokalt och anv\u00e4ndas fr\u00e5n file:\/\/.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h4>Webbl\u00e4sarpolicyer<\/h4>\n<ul>\n<li>CSP har inf\u00f6rts f\u00f6r att bek\u00e4mpa XSS;<\/li>\n<li>servern skickar HSTS.<\/li>\n<\/ul>\n<h4>\u00d6vriga \u00e4ndringar<\/h4>\n<ul>\n<li>projektet har bytt namn fr\u00e5n Epha-ots;<\/li>\n<li>dom\u00e4nen adnihilum.net har k\u00f6pts;<\/li>\n<li>TLS tillhandah\u00e5lls av Let\u2019s Encrypt, det \u00e4r viktigt att ha i \u00e5tanke (ingen kostnad);<\/li>\n<li>arbetet med filer har f\u00f6renklats;<\/li>\n<li>\u00f6verg\u00e5ng till fat-pointers;<\/li>\n<li>sm\u00e5buggar har fixats;<\/li>\n<li>auto-jsminify och bygg av klientfiler vid kompilering via CMake.<\/li>\n<\/ul>\n<h3>\u00d6versikt av protokollet<\/h3>\n<p>Generera tre slumpm\u00e4ssiga v\u00e4rden: nyckel <strong>K<\/strong>, initialiseringsvektor <strong>N<\/strong> och salt <strong>S<\/strong>. <strong>K<\/strong> \u2014 256 bitar, <strong>N<\/strong> \u2014 96 bitar, <strong>S<\/strong> \u2014 128 bitar.<\/p>\n<p>Skriv ut <strong>ID<\/strong> fr\u00e5n <strong>K<\/strong> och <strong>S<\/strong> med HKDF baserat p\u00e5 SHA-256.<\/p>\n<p>Skapa en str\u00e4ng av ytterligare autentiserad data <strong>aad<\/strong> \u2014 det \u00e4r helt enkelt en str\u00e4ng av typen: id=ID<\/p>\n<p>Om anv\u00e4ndaren har angett ett l\u00f6senord:<\/p>\n<ul>\n<li>skriv ut <strong>Pk<\/strong> fr\u00e5n l\u00f6senordet och <strong>S<\/strong> med hj\u00e4lp av PBKDF2, SHA-256, 800000 iterationer;<\/li>\n<li>samma salt anv\u00e4nds f\u00f6r allt;<\/li>\n<li>kryptera data med AES-GCM, med nyckel <strong>Pk<\/strong>, IV\/nonce <strong>N<\/strong> och \u00f6verf\u00f6ra <strong>aad<\/strong>.<\/li>\n<\/ul>\n<p>L\u00e4gg till en tv\u00e5bytes-tag till redan krypterade data, om l\u00f6senordet angavs, annars till de ursprungliga data.<\/p>\n<p>Den f\u00f6rsta byte har betydelse: den visar om data har krypterats med ett l\u00f6senord:<\/p>\n<ul>\n<li>0x73 \u2014 data har krypterats med ett l\u00f6senord;<\/li>\n<li>0x13 \u2014 data har inte krypterats med ett l\u00f6senord.<\/li>\n<\/ul>\n<p>Den andra byte \u00e4r ett konstant v\u00e4rde 0x37.<\/p>\n<p>Kryptera resultatet igen med AES-GCM, med samma iv = N och samma <strong>aad<\/strong>. Detta ger den slutliga chiffertexten <strong>ct<\/strong>.<\/p>\n<p>Koppla ihop byte till en str\u00e4ng: blob = N .. S .. ct<\/p>\n<p>Skicka <strong>blob<\/strong> till servern tillsammans med <strong>ID<\/strong>. Servern returnerar <strong>blob<\/strong> genom detta <strong>ID<\/strong> och kan inte \u00e4ndra det: klienten kommer f\u00f6rst att kontrollera <strong>ID<\/strong> med hj\u00e4lp av <strong>N<\/strong> och <strong>K<\/strong> \u00e4ven innan avkodning, och sedan \u2014 genom <strong>aad<\/strong>.<\/p>\n<p>Klienten lagrar <strong>K<\/strong>. <strong>K<\/strong> skickas aldrig till servern. <strong>Pk<\/strong> skickas inte heller; allt som r\u00f6r l\u00f6senordet rensas fr\u00e5n minnet.<\/p>\n<p>Klienten bildar en l\u00e4nk: origin\/#ID\/K<\/p>\n<p>H\u00e4r <strong>ID<\/strong> och <strong>K<\/strong> \u2014 str\u00e4ngar i base64url-format.<\/p>\n<p>N\u00e4r mottagaren \u00f6ppnar l\u00e4nken:<\/p>\n<ul>\n<li>webbl\u00e4saren sl\u00e4nger allt som b\u00f6rjar med #; detta kallas location.hash;<\/li>\n<li>klientapplikationen laddas fr\u00e5n servern;<\/li>\n<li>enligt min \u00e5sikt \u00e4r detta den st\u00f6rsta s\u00e4kerhetsluckan: vi st\u00f6ter faktiskt igen p\u00e5 det faktum att \"TLS \u00e4r os\u00e4kert\";<\/li>\n<li>men inget hindrar att klienten lagras offline;<\/li>\n<li>idealiskt skulle det finnas en separat frist\u00e5ende klient.<\/li>\n<\/ul>\n<p>Klientens JavaScript kontrollerar location.hash, och om det finns <strong>ID<\/strong> och <strong>K<\/strong>, laddar det data fr\u00e5n servern.<\/p>\n<p>Sedan kontrollerar den dem, avkodar och, om det beh\u00f6vs, beg\u00e4r l\u00f6senord och avkodar igen.<\/p>\n<h3>Licens<\/h3>\n<p>Projektet distribueras under GPLv3.<\/p>\n<p>K\u00e4lla: <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.4 - 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\/sv\/blog\/news\/ad-nihilum-0-4-3\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\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\/sv\/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":"Ad Nihilum 0.4.3 har sl\u00e4ppts \u2014 en minimalistisk tj\u00e4nst f\u00f6r att utbyta krypterade meddelanden med konceptet \"l\u00e4st \u2014 br\u00e4nd\", som fr\u00e4mst \u00e4r inriktad p\u00e5 self-hosting. Servern fungerar endast som en roll.","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/news\/ad-nihilum-0-4-3","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","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\/sv\/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\/sv\/wp-json\/wp\/v2\/posts\/172755","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=172755"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/172755\/revisions"}],"predecessor-version":[{"id":173166,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/172755\/revisions\/173166"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=172755"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=172755"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=172755"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}