{"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\/hr\/blog\/news\/ad-nihilum-0-4-3","title":{"rendered":"Ad Nihilum 0.4.3","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Izdana je verzija Ad Nihilum 0.4.3 \u2014 minimalisti\u010dke usluge za razmjenu \u0161ifriranih poruka prema principu &laquo;pro\u010ditao \u2014 spalio&raquo;, koja je prvenstveno usmjerena na self-hosting.<\/p>\n<p>Poslu\u017eitelj slu\u017ei samo kao gluhi spremnik. \u0160ifriranje i de\u0161ifriranje odvijaju se isklju\u010divo na strani klijenta, u pregledniku (putem AES-GCM).<\/p>\n<h3>Karakteristike<\/h3>\n<ul>\n<li>lokalno \u0161ifriranje i de\u0161ifriranje, <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/hr\/server\/\"   title=\"server\" data-wpil-keyword-link=\"linked\">server<\/a> nikada ne vidi klju\u010d;<\/li>\n<li>podr\u0161ka za dodatni sloj \u0161ifriranja lozinkom, o kojoj (1) poslu\u017eitelj ne mo\u017ee saznati, (2) ne mo\u017ee se saznati prema prenesenoj vezi;<\/li>\n<li>projekt sadr\u017ei oko 2200 redaka poslu\u017eiteljskog koda u C-u i 600 redaka klijentskog koda u JS-u, \u0161to olak\u0161ava reviziju;<\/li>\n<li>Ad Nihilum ovisi samo o libmicrohttpd. Za generiranje QR kodova isporu\u010dena je modificirana verzija QRCode.js;<\/li>\n<li>prilo\u017eena je uputa za brzo postavljanje lokalne usluge bez vanjske IP adrese;<\/li>\n<li>Ad Nihilum radi i na Androidu, prilo\u017een je odgovaraju\u0107i skript za izgradnju u Termuxu;<\/li>\n<li>jednoprocessni i sinkroni poslu\u017eitelj.<\/li>\n<\/ul>\n<h3>Promjene<\/h3>\n<h4>Opse\u017ean redizajn<\/h4>\n<ul>\n<li>Stranice za slanje i primanje poruka su odvojene, odgovaraju\u0107i klijentski kod.<\/li>\n<li>Dizajn je uvelike promijenjen i prilago\u0111en u skladu s povratnim informacijama korisnika.<\/li>\n<li>&laquo;Jednostavni&raquo; i lokalni klijenti:\n<ul> <noindex><\/p>\n<li>dodani klijent s pojednostavljenim dizajnom <a rel=\"nofollow\" href=\"https:\/\/adnihilum.net\/simple\">https:\/\/adnihilum.net\/simple<\/a>;<\/li>\n<p><\/noindex> <\/p>\n<li>klijentske stranice mogu se sa\u010duvati lokalno i koristiti iz file:\/\/.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h4>Politike preglednika<\/h4>\n<ul>\n<li>implementiran je CSP za borbu protiv XSS;<\/li>\n<li>poslu\u017eitelj \u0161alje HSTS.<\/li>\n<\/ul>\n<h4>Ostale izmjene<\/h4>\n<ul>\n<li>projekt je preimenovan iz Epha-ots;<\/li>\n<li>kupljena je domena adnihilum.net;<\/li>\n<li>TLS se osigurava pomo\u0107u Let&rsquo;s Encrypt, \u0161to vrijedi imati na umu (nema novca);<\/li>\n<li>olak\u0161ana je obrada datoteka;<\/li>\n<li>prelazak na fat-pointere;<\/li>\n<li>ispravljene su manje gre\u0161ke;<\/li>\n<li>auto-jsminify i izgradnja klijentskih datoteka prilikom izgradnje putem CMake-a.<\/li>\n<\/ul>\n<h3>Pregled protokola<\/h3>\n<p>Generirati tri nasumi\u010dne vrijednosti: klju\u010d <strong>K<\/strong>, vektor inicijalizacije <strong>N<\/strong> i sol <strong>S<\/strong>. <strong>K<\/strong> \u2014 256 bita, <strong>N<\/strong> \u2014 96 bita, <strong>S<\/strong> \u2014 128 bita.<\/p>\n<p>Isplati <strong>ID<\/strong> iz <strong>K<\/strong> i <strong>S<\/strong> uz pomo\u0107 HKDF temeljenog na SHA-256.<\/p>\n<p>Formirati niz dodatnih autentificiranih podataka <strong>aad<\/strong> \u2014 to je samo niz oblika: id=ID<\/p>\n<p>Ako je korisnik postavio lozinku:<\/p>\n<ul>\n<li>izlaziti <strong>Pk<\/strong> iz lozinke i <strong>S<\/strong> uz pomo\u0107 PBKDF2, SHA-256, 800000 iteracija;<\/li>\n<li>ista sol koristi se za sve;<\/li>\n<li>\u0161ifrirati podatke pomo\u0107u AES-GCM, koriste\u0107i klju\u010d <strong>Pk<\/strong>, IV\/nonce <strong>N<\/strong> i poslati <strong>aad<\/strong>.<\/li>\n<\/ul>\n<p>Dodati dvo-bajtni tag ve\u0107 \u0161ifriranim podacima ako je lozinka bila, ili izvornih podacima ako lozinke nije bilo.<\/p>\n<p>Prvi bajt ima vrijednost: pokazuje jesu li podaci \u0161ifrirani lozinkom:<\/p>\n<ul>\n<li>0x73 \u2014 podaci su \u0161ifrirani lozinkom;<\/li>\n<li>0x13 \u2014 podaci nisu \u0161ifrirani lozinkom.<\/li>\n<\/ul>\n<p>Drugi bajt \u2014 stalna vrijednost 0x37.<\/p>\n<p>Ponovno \u0161ifrirajte rezultat pomo\u0107u AES-GCM, koriste\u0107i isti iv = N i isti <strong>aad<\/strong>. To daje kona\u010dni \u0161ifrovan tekst <strong>ct<\/strong>.<\/p>\n<p>Spojite bajtove u string: blob = N .. S .. ct<\/p>\n<p>Po\u0161aljite <strong>blob<\/strong> na server zajedno s <strong>ID<\/strong>. Server vra\u0107a <strong>blob<\/strong> prema tome <strong>ID<\/strong> i ne mo\u017ee ga zamijeniti: klijent prvo provjerava <strong>ID<\/strong> s kori\u0161tenjem <strong>N<\/strong> i <strong>K<\/strong> jo\u0161 prije de\u0161ifriranja, a zatim \u2014 putem <strong>aad<\/strong>.<\/p>\n<p>Klijent \u010duva <strong>K<\/strong>. <strong>K<\/strong> nikada se ne \u0161alje na server. <strong>Pk<\/strong> tako\u0111er se ne \u0161alje; sve \u0161to je vezano uz lozinku se bri\u0161e iz memorije.<\/p>\n<p>Klijent formira vezu: origin\/#ID\/K<\/p>\n<p>Ovdje <strong>ID<\/strong> i <strong>K<\/strong> \u2014 stringovi u formatu base64url.<\/p>\n<p>Kada primatelj otvori vezu:<\/p>\n<ul>\n<li>pregleda\u010d odbacuje sve \u0161to po\u010dinje s #; to se zove location.hash;<\/li>\n<li>klijentska aplikacija se u\u010ditava sa servera;<\/li>\n<li>smatram da je to glavna rupa: zapravo se ponovo suo\u010davamo s problemom da je 'TLS probojan';<\/li>\n<li>me\u0111utim, ni\u0161ta ne sprje\u010dava da klijent bude offline;<\/li>\n<li>u idealnom slu\u010daju trebao bi biti odvojeni standalone-klijent.<\/li>\n<\/ul>\n<p>Klijentski JavaScript provjerava location.hash, i ako ima <strong>ID<\/strong> i <strong>K<\/strong>, preuzima podatke s poslu\u017eitelja.<\/p>\n<p>Zatim ih provjerava, de\u0161ifrira i, ako je potrebno, tra\u017ei lozinku i de\u0161ifrira ponovno.<\/p>\n<h3>Licenca<\/h3>\n<p>Projekt se distribuira pod GPLv3.<\/p>\n<p>Izvor: <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\/hr\/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=\"hr_HR\" \/>\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\/hr\/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":"Odr\u017eano je izdanje Ad Nihilum 0.4.3 \u2014 minimalisti\u010dke usluge za razmjenu \u0161ifriranih poruka po principu 'pro\u010ditao \u2014 spalio', usmjerene prvenstveno na self-hosting. Server slu\u017ei samo kao.","canonical_url":"https:\/\/prohoster.info\/hr\/blog\/news\/ad-nihilum-0-4-3","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hr_HR","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\/hr\/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\/hr\/wp-json\/wp\/v2\/posts\/172755","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/comments?post=172755"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts\/172755\/revisions"}],"predecessor-version":[{"id":173166,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts\/172755\/revisions\/173166"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/media?parent=172755"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/categories?post=172755"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/tags?post=172755"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}