<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Marius V</title>
    <description>The latest articles on DEV Community by Marius V (@dissimilis).</description>
    <link>https://dev.to/dissimilis</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F581509%2Fe782e77a-2760-41d3-995c-beed6cce8069.png</url>
      <title>DEV Community: Marius V</title>
      <link>https://dev.to/dissimilis</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dissimilis"/>
    <language>en</language>
    <item>
      <title>Two Unconventional Ways to store Passwords: Honeywords &amp; Rock Salt</title>
      <dc:creator>Marius V</dc:creator>
      <pubDate>Thu, 31 Oct 2024 10:08:42 +0000</pubDate>
      <link>https://dev.to/dissimilis/two-unconventional-ways-to-store-passwords-honeywords-rock-salt-595l</link>
      <guid>https://dev.to/dissimilis/two-unconventional-ways-to-store-passwords-honeywords-rock-salt-595l</guid>
      <description>&lt;p&gt;As online threats keep evolving, storing passwords securely has become a constant challenge for developers. The usual methods, like hashing and salting passwords with algorithms such as Argon2, bcrypt, or PBKDF2, have worked well to make brute-force attacks harder. But as attackers get more sophisticated, these techniques alone may not be enough—especially for larger systems where a breach could be disastrous. Let’s dive into two creative approaches for password storage — &lt;strong&gt;Honeywords ** and **Rock Salt&lt;/strong&gt; — that add layers of security with a focus on detection and resilience.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This article is not a recommendation; its intention is to stimulate thought by exploring unorthodox approaches.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Password Storage Needs a New Twist
&lt;/h2&gt;

&lt;p&gt;Passwords are the gatekeepers of web applications. But traditional methods like salted hashes have their limits when facing today’s complex threats. This is where Honeywords and Rock Salt come in handy. Honeywords add fake passwords to trip up attackers and detect unauthorized access, while Rock Salt uses a unique, ultra-secure key to further protect against brute-force attacks. Together, they offer developers new ways to protect passwords against increasingly savvy cyber threats.&lt;/p&gt;

&lt;h2&gt;
  
  
  Honeywords: Decoy Passwords That Fight Back
&lt;/h2&gt;

&lt;p&gt;The Honeywords technique spices things up by creating decoy passwords— “honeywords” — that sit alongside each real password in the database. These decoys look like the real thing but are designed to detect an attacker. If an attacker somehow gains access to the database and tries one of these honeywords, a separate system, the Honeychecker, will recognize the fake and trigger an alert, tipping off administrators that something’s up. Legitimate users remain unaffected since only the Honeychecker knows which passwords are real. Honeychecker is essentially just a separate system which keeps track of which passwords are real and which are decoys.&lt;/p&gt;

&lt;p&gt;Imagine an attacker breaking into a database and attempting to use a password hash they think is legitimate. If they unknowingly pick a honeyword, the system flags this attempt, giving admins the chance to step in quickly. This way, Honeywords help catch intruders early on, increasing the chances of detecting breaches before significant damage is done.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Set Up Honeywords in Practice
&lt;/h2&gt;

&lt;p&gt;Adding Honeywords is pretty straightforward. Each time a user creates or updates their password, the system generates several honeywords and shuffles them in with the real one. Only the Honeychecker knows which one is genuine. During login attempts, the Honeychecker verifies if the entered password is correct or just a decoy. If a decoy is used, an alert is raised for admins to investigate.&lt;/p&gt;

&lt;p&gt;Creating convincing decoys can be tricky; they need to look realistic so attackers can’t easily tell them apart from real passwords. Many systems automate this by using algorithms to generate honeywords that mimic real passwords. That way, it’s hard for intruders to guess which ones are real.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rock Salt: Password Security with a Physically Protected Key
&lt;/h2&gt;

&lt;p&gt;While Honeywords focus on catching attackers in the act, Rock Salt’s strength lies in adding brute-force resilience by involving a physically protected &lt;strong&gt;Very Large Key (VLK)&lt;/strong&gt;. Here’s the basic idea: most password systems only involve hashing and salting, where an attacker could theoretically make countless guesses to reverse the password hash. Rock Salt changes this by making password verification depend on both the hashed password &lt;strong&gt;and&lt;/strong&gt; access to a unique VLK stored in a secure, restricted-access Rock Salt Server (RSS).&lt;/p&gt;

&lt;p&gt;Here’s how Rock Salt’s VLK works in practice:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Password Entry and Hashing&lt;/strong&gt;: When a user logs in, their entered password is hashed with a “salt”—an additional random value that varies by user.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Salt Sent to the Rock Salt Server&lt;/strong&gt;: This salt, along with the hashed password, is sent to the RSS. Inside the RSS, the salt acts as a kind of “map” to a specific segment of the VLK, essentially saying, “Give me these specific bytes.”&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Combining Salt and VLK&lt;/strong&gt;: The RSS uses these requested bytes of the VLK and combines them with the salt to generate a &lt;strong&gt;Rock Salt&lt;/strong&gt;—a unique, one-time value that cannot be replicated without access to the RSS and VLK. This Rock Salt is then combined with the password hash to generate a final, unique hash element.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Final Hash Comparison&lt;/strong&gt;: This final hash is what gets compared to the stored hash in the database. If it matches, access is granted; if not, the login attempt is denied.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;By involving the VLK in every login attempt, Rock Salt makes brute-force attacks nearly impossible. Attackers would need access to both the hashed passwords and the secure VLK server, which is designed to be physically protected and inaccessible outside of verification.&lt;/p&gt;

&lt;p&gt;This system’s resistance to quantum computing and its reliance on physical security make Rock Salt an ideal solution for environments requiring long-term and high-resilience password protection.&lt;/p&gt;

&lt;h2&gt;
  
  
  Honeywords vs. Rock Salt: How They Work Together
&lt;/h2&gt;

&lt;p&gt;Honeywords and Rock Salt have different strengths, but they work well together. Honeywords focus on detection, providing an early warning if an intruder is trying to break in, while Rock Salt offers brute-force protection, making it harder for anyone to crack passwords even if they’ve breached the database. Honeywords are simpler to deploy, so they’re ideal for systems that need an alert mechanism, while Rock Salt is better for environments with the infrastructure for secure physical storage.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real-World Applications of Honeywords and Rock Salt
&lt;/h2&gt;

&lt;p&gt;For web platforms with frequent user logins—like social media or e-commerce sites—Honeywords can be a lifesaver. They make it easier to spot intrusions quickly. If an attacker ever gets their hands on login data, honeywords can act as an immediate alarm when one of the fake passwords is used.&lt;/p&gt;

&lt;p&gt;Rock Salt is perfect for places like banks or big corporations with highly sensitive data. Since the approach requires a bit of hardware security, it’s best suited to large-scale organizations that can handle the additional infrastructure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Potential Hurdles and Downsides
&lt;/h2&gt;

&lt;p&gt;For Honeywords, the main challenge is generating decoys that look real. Advanced honeyword generators use behavior models to make believable honeywords, but they need updating over time to stay effective. Rock Salt’s biggest hurdle is its cost, given the hardware and security requirements involved, which might be overkill for smaller applications. Of course it's quite easy to implement Rock Salt in a DIY fashion, by just storing few terabyte random file on a separate server and using it as "difficult to leak VLK".&lt;/p&gt;

&lt;h2&gt;
  
  
  Making the Most of Both Techniques
&lt;/h2&gt;

&lt;p&gt;Using Honeywords and Rock Salt together can offer the best of both worlds. Honeywords give you that immediate alert if an intruder tries to use a decoy, while Rock Salt makes the real passwords tougher to crack. To make this work, developers should keep the honeywords fresh and manage Rock Salt’s storage securely across systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://people.csail.mit.edu/rivest/pubs/JR13.pdf" rel="noopener noreferrer"&gt;Honeywords: Making Password-Cracking Detectable&lt;/a&gt; by  Ari Juels and Ronald L. Rivest&lt;br&gt;
&lt;a href="https://www.researchgate.net/publication/305849439_Rock_Salt_A_Method_for_Securely_Storing_and_Utilizing_Password_Validation_Data" rel="noopener noreferrer"&gt;Rock Salt: A Method for Securely Storing and Utilizing Password Validation Data&lt;/a&gt; by Arnold Reinhold&lt;/p&gt;

</description>
      <category>honeywords</category>
      <category>passwords</category>
      <category>security</category>
      <category>hashing</category>
    </item>
    <item>
      <title>Apie CityBee ir slaptažodžių saugumą</title>
      <dc:creator>Marius V</dc:creator>
      <pubDate>Fri, 19 Feb 2021 14:46:01 +0000</pubDate>
      <link>https://dev.to/dissimilis/apie-citybee-ir-slaptazodziu-sauguma-2524</link>
      <guid>https://dev.to/dissimilis/apie-citybee-ir-slaptazodziu-sauguma-2524</guid>
      <description>&lt;p&gt;&lt;em&gt;Šis straipsnis parašytas po CityBee skandalo pradėjus plisti netiksliai informacijai apie slaptažodžių saugojimą. Skirta tiek IT specialistams, tiek norintiems labiau suprasti situaciją.&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Trumpai (TL;DR;)
&lt;/h1&gt;

&lt;p&gt;&lt;a href="(https://www.15min.lt/verslas/naujiena/bendroves/pavogti-treju-metu-senumo-dalies-citybee-klientu-duomenys-663-1456578)"&gt;Iš įmonės CityBee&lt;/a&gt;, o vėliau ir iš &lt;a href="https://www.15min.lt/mokslasit/straipsnis/technologijos/hakeriai-pardavineja-ir-orakulas-lt-vartotoju-duomenu-baze-257-tukst-el-pasto-adresu-ir-slaptazodziu-646-1457532" rel="noopener noreferrer"&gt;OlyBet&lt;/a&gt; bei &lt;a href="https://raidforums.com/Thread-TXT-filmai-in-lithuania-illegal-streaming-site-db" rel="noopener noreferrer"&gt;filmai.in&lt;/a&gt; nutekėjus klientų duomenims bei paaiškėjus, jog be viso kito, slaptažodžiai buvo saugomi nesaugiu SHA1 algoritmu, internete pradėjo plisti nuomonės apie tai, kaip įmonė turėjo teisingai saugoti slaptažodžius. Pasisakė visi, nuo IT "specialistų", iki mažai ką bendro su IT turinčių &lt;a href="https://youtu.be/wbKznbxe5r4?t=810" rel="noopener noreferrer"&gt;influencerių&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Beveik visi komentarai apsiriboja tuo pačiu teiginiu: CityBee saugodami slaptažodžius nenaudojo vadinamo "salt" metodo, o tai yra labai blogai ir jei būtų naudotas "salt" - klientų slaptažodžiai būtų buvę žymiai saugesni.&lt;/p&gt;

&lt;p&gt;Dauguma apie "salt" kalbančių žmonių mažai ką supranta apie saugumą ir tik daro žalą IT industrijai klaidindami jaunus specialistus. Nepaisant, jog CityBee elgesys buvo aplaidus, tai tas pats, kas po avia-katastrofos, kur iš lėktuvo liko tik blynas, aiškinti, jog lėktuve nebuvo įrengti saugos diržai.&lt;/p&gt;

&lt;p&gt;Saugant vartotojų slaptažodžius reikia naudoti specialius tam skirtus algoritmus. Jų yra daugybė, bet mano rekomenduojamas &lt;strong&gt;baigtinis sąrašas&lt;/strong&gt;: PBKDF2, BCrypt, Argon2. Tai yra absoliutus minimumas, privalomas kiekvienai internetinei sistemai, nes nereikalauja pastangų ir duoda maksimaliai rezultato. Na, o apie viską išsamiai - žemiau.&lt;/p&gt;

&lt;h1&gt;
  
  
  Kaip "koduojami" slaptažodžiai
&lt;/h1&gt;

&lt;p&gt;Slaptažodžiai naudojami daug kur: jungiantis prie kompiuterio, apsaugant failus, registruojantis internetiniuose puslapiuose. Kad būtų paprasčiau, apsiribokime CityBee pavyzdžiu.&lt;/p&gt;

&lt;p&gt;Vartotojas registruodamasis CityBee programėlėje nurodo savo pasirinktą slaptažodį. Sistema jį turi kažkur išsaugoti, kad vėliau vartotojui jungiantis galėtų sutikrinti ar slaptažodžiai sutampa. Kadangi įsiminti krūvą slaptažodžių sudėtinga, žmonės visur linkę naudoti tuos pačius arba panašius slaptažodžius. Tarkim, jeigu žmogaus CityBee slaptažodis yra &lt;code&gt;LinksmasBebras&lt;/code&gt;, didelė tikimybė, jog Gmail, Facebook ar net banko slaptažodis bus &lt;code&gt;LinksmasBebras1!&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;Natūralu, jog CityBee negali saugoti slaptažodžio paprastu tekstu (angl. &lt;em&gt;plain text&lt;/em&gt;), nes tiek duomenų vagys, tiek ir vidiniai įmonės darbuotojai galėtų vartotojams pridaryti daugybę problemų. Išeitys yra dvi: slaptažodžius šifruoti arba "hash'uoti".&lt;/p&gt;

&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/Encryption" rel="noopener noreferrer"&gt;Šifravimas (dar klaidingai vadinamas kodavimu, angl. &lt;em&gt;encryption&lt;/em&gt;)&lt;/a&gt; yra operacija, kurios metu, naudojant slaptą raktą, duomenys užšifruojami taip, jog be rakto jų nebūtų įmanoma perskaityti. Panaudojus tą patį raktą duomenis galima iššifruoti į jų pradinę formą. Šifruoti slaptažodžius nėra labai populiaru, nes sunku saugiai prižiūrėti raktą, kuris irgi gali būti pavogtas arba prieinamas įmonės darbuotojų.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8mjvi629sjx9x8mywwsa.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8mjvi629sjx9x8mywwsa.jpg" alt="Šifravimos procesas" width="789" height="468"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/Hash_function" rel="noopener noreferrer"&gt;Hash'avimas (liet. &lt;em&gt;maiša&lt;/em&gt;)&lt;/a&gt;, paprastai pasakius, yra algoritmas iš teksto gauti fiksuoto ilgio simbolių kratinį. Iš to paties teksto visuomet gaunamas tas pats simbolių kratinys. Iš hash funkcijos rezultato nebeįmanoma atstatyti pradinio teksto. Štai paprasta hash funkcija aprašyta žmonių kalba:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Sudauginkime teksto kiekvienos raidės eilės numerį abėcėlėje;
Gautą sandaugą padalinkime iš 100;
Liekana bus mūsų hash'as;
Pvz.: "abce" hash'as pagal šį algoritmą yra 1*2*3*5 = "30";
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://lt.wikipedia.org/wiki/Asmens_kodas" rel="noopener noreferrer"&gt;Mūsų asmens kodų paskutinis skaitmuo irgi yra hash'as&lt;/a&gt; išskaičiuotas iš prieš jį einančių 10 simbolių.&lt;/p&gt;

&lt;p&gt;Hash'avimas skamba kaip idealus būdas saugoti slaptažodžius - galima išsaugoti ir vėliau patikrinti ar įvesto slaptažodžio hash'as sutampa su išsaugota reikšme. O hash algoritmų yra labai daug ir įvairių, CityBee pasirinko gana populiarų, bet senstelėjusį, &lt;a href="https://en.wikipedia.org/wiki/SHA-1" rel="noopener noreferrer"&gt;SHA1&lt;/a&gt; algoritmą, jis iš bet kokio ilgio duomenų sugeneruoja 20 baitų ilgio reikšmę. Pvz. teksto &lt;code&gt;LinksmasBebras&lt;/code&gt; SHA1 rezultatas yra "304c888dc981169e1dca9f31998cece8da2c2458". Iš dviejų skirtingų slaptažodžių gauti tą pačią hash reikšmę teoriškai įmanoma, bet praktiškai nelabai (priešingai nei naudojant aukščiau pavaizduotą supaprastintą algoritmą). Yra ir kitų populiarių hash algoritmų: MD5, SHA256, SHA512 ir pan.&lt;/p&gt;

&lt;p&gt;Visas CityBee darbo su slaptažodžiais procesas buvo toks:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Vartotojas registruodamasis programėlėje įveda slaptažodį &lt;code&gt;LinksmasBebras&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Slaptažodis nukeliauja į centrinę CityBee sistemą.&lt;/li&gt;
&lt;li&gt;Sistema suskaičiuoja gauto slaptažodžio hash'ą naudodama SHA1 algoritmą.&lt;/li&gt;
&lt;li&gt;Sistema išsaugo gautą hash reikšmę &lt;code&gt;304c888dc981169e1dca9f31998cece8da2c2458&lt;/code&gt; į duomenų bazę, kartu su kitais vartotojo duomenimis. Registracija sėkminga.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&amp;lt;..&amp;gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Vartotojas jungdamasis prie sistemos įveda slaptažodį &lt;code&gt;LinksmasBebras&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Slaptažodis nukeliauja į centrinę CityBee sistemą.&lt;/li&gt;
&lt;li&gt;Sistema suskaičiuoja gauto slaptažodžio hash'ą naudodama SHA1 algoritmą.&lt;/li&gt;
&lt;li&gt;Sistema palygina gautą hash reikšmę &lt;code&gt;304c888dc981169e1dca9f31998cece8da2c2458&lt;/code&gt; su vartotojo hash reikšme iš duomenų bazės. Kadangi sutampa - prisijungimas sėkmingas. &lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  Kodėl CityBee slaptažodžius "kodavo" blogai
&lt;/h1&gt;

&lt;p&gt;Primenu, kad iš CityBee, be kita ko, buvo pavogti vartotojų slaptažodžiai SHA1 hash'ų pavidalu. &lt;a href="https://www.linkedin.com/pulse/pam%25C4%2585stymai-apie-citybee-duomen%25C5%25B3-nutek%25C4%2597jim%25C4%2585-marius-vitkevi%25C4%258Dius/?trackingId=xFedLklITIK7NP30nMBPqQ%3D%3D" rel="noopener noreferrer"&gt;Ar kaip jie patys klaidina: "užkoduoti"&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Nors iš hash reikšmės ir neįmanoma atkurti pradinio teksto, tačiau niekas netrukdo skaičiuoti visų įmanomų simbolių kombinacijų SHA1 hash'o, kol atrasime ieškomą. Pradėję nuo "a", paskiau "b" ir t.t. ilgainiui (po nesuvokiamos galybės bandymų) prieisime prie &lt;code&gt;LinksmasBebras&lt;/code&gt;, gausime atsakymą "304c888dc981169e1dca9f31998cece8da2c2458" ir taip sužinosime koks tekstas slėpėsi po šia hash reikšme. Toks visų reikšmių išbandymas vadinamas &lt;a href="https://en.wikipedia.org/wiki/Brute-force_attack" rel="noopener noreferrer"&gt;brute-force ataka&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;SHA1 ypatybė yra ta, jog jis sukurtas būti labai efektyvus, kompiuteriui suskaičiuoti teksto SHA1 hash'ą yra vieni juokai. Nepaisant to, jog net mano kompiuteris gali išbandyti kelis milijardus kombinacijų per sekundę, jų yra &lt;a href="https://tmedweb.tulane.edu/content_open/bfcalc.php?uc=2&amp;amp;lc=12&amp;amp;nu=&amp;amp;sc=&amp;amp;ran=&amp;amp;rans=&amp;amp;dict=" rel="noopener noreferrer"&gt;tiek daug&lt;/a&gt;, jog užtruktume daugybę metų kol prieitume iki &lt;code&gt;LinksmasBebras&lt;/code&gt;. Tačiau kas trukdo pasiėmus Lietuvių kalbos žodyną išbandyti visų žodžių junginių kombinacijas? Įtraukus visas didžiųjų-mažųjų raidžių kombinacijas, belieka tik keliolika milijardų spėjimų - vienas juokas šiuolaikinei technikai. Apie tai, kaip nulaužinėjami hash'ai - šiek tiek vėliau.&lt;/p&gt;

&lt;p&gt;Pasitelkus įvairius genialius būdus, galima sugeneruoti milžiniskas duomenų bazes su potencialiais slaptažodžiais ir jų hash reikšmėmis. Į tokias duomenų bazes patenka ir įvairiais būdais nutekėję realūs slaptažodžiai. Pavyzdžiui, &lt;a href="https://crackstation.net" rel="noopener noreferrer"&gt;crackstation.net&lt;/a&gt; leidžia net parsisiųsti savo turimą 15GB slaptažodžių duomenų bazę. Nebereikia nieko laužti, belieka tik surasti domenų bazėje kokį tekstą atitinka jūsų turima hash reikšmė.&lt;/p&gt;

&lt;h1&gt;
  
  
  Panacėja, vardu "Druska"
&lt;/h1&gt;

&lt;p&gt;Po CityBee skandalo bent kiek IT sistemose nusimanantys specialistai suskubo aiškinti, jog saugoti slaptažodžius SHA1 pavidalu buvo kvailystė ir CityBee (tiksliau jų sistemos pamatus padėjusi įmonė) turėjo naudoti salt'ą. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/Salt_(cryptography)" rel="noopener noreferrer"&gt;Salt'inimas&lt;/a&gt;, tai yra slaptažodžių saugojimo patobulinimas, kai prie teksto pridedami atsitiktiniai simboliai (salt'as) ir tik tuomet skaičiuojamas hash'as. SHA1 reikšmę reikėtų skaičiuoti iš teksto &lt;code&gt;LinksmasBebrasE1F53135E559C253&lt;/code&gt;, o rezultatą &lt;strong&gt;ir&lt;/strong&gt; salt'ą išsaugoti duomenų bazėje. CityBee registracijos ir prisijungimo procesas naudojant salt būtų buvęs toks:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Vartotojas registruodamasis programėlėje įveda slaptažodį &lt;code&gt;LinksmasBebras&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Slaptažodis nukeliauja į centrinę CityBee sistemą.&lt;/li&gt;
&lt;li&gt;Sistema sugeneruoja atsitiktinę salt reikšmę, prideda ją prie gauto slaptažodžio ir suskaičiuoja teksto &lt;code&gt;LinksmasBebrasE1F53135E559C253&lt;/code&gt; hash'ą naudodama SHA1 algoritmą.&lt;/li&gt;
&lt;li&gt;Sistema išsaugo gautą hash reikšmę &lt;code&gt;ae679d1015ee8dd586036c9de34ade76c33f1c3a&lt;/code&gt; ir panaudotą salt'ą &lt;code&gt;E1F53135E559C253&lt;/code&gt; į duomenų bazę, kartu su kitais vartotojo duomenimis. Registracija sėkminga.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&amp;lt;..&amp;gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Vartotojas jungdamasis prie sistemos įveda slaptažodį &lt;code&gt;LinksmasBebras&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Slaptažodis nukeliauja į centrinę CityBee sistemą.&lt;/li&gt;
&lt;li&gt;Sistema pasiima iš duomenų bazės seniau išsaugotą salt reikšmę &lt;code&gt;E1F53135E559C253&lt;/code&gt;, prideda ją prie įvesto slaptažodžio ir paskaičiuoja teksto &lt;code&gt;LinksmasBebrasE1F53135E559C253&lt;/code&gt; hash reikšmę.&lt;/li&gt;
&lt;li&gt;Sistema palygina gautą hash reikšmę su vartotojo hash reikšme duomenų bazėje. Jei sutampa - prisijungimas sėkmingas. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Įsidėmėkite, kad salt reikšmė saugoma šalia slaptažodžio toje pačioje duomenų bazėje. Jei daroma kaip nors kitaip, tai nebėra salt.&lt;/p&gt;

&lt;p&gt;Salt naudojimas išsprendžia dvi problemas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Nebeįmanoma naudoti iš anksto sugeneruotos slaptažodžių duomenų bazės, nes net visuose pasaulio diskuose netilps tiek daug teksto kombinacijų.&lt;/li&gt;
&lt;li&gt;Jei du skirtingi vartotojai naudos tą patį slaptažodį, jo hash'as duomenų bazėje bus skirtingas.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Prieš ~15 metų, salt naudojimas buvo gana adekvati apsauga, nes negalėjimas pasinaudoti kažkieno ilgus metus kauptomis duomenų bazėmis reiškė, jog įsilaužėlis turės pats bandyti perrinkinėti kiekvieno vartotojo slaptažodį. &lt;/p&gt;

&lt;p&gt;Atsiradus pirmosioms galingoms vaizdo plokštėms buvo pastebėta, jog hash'us jos moka skaičiuoti daug greičiau nei kompiuterio procesorius. Tūkstančius kartų greičiau. Nuo to laiko viskas pasikeitė ir jau &lt;strong&gt;&lt;em&gt;prieš daugiau nei 10 metų&lt;/em&gt;&lt;/strong&gt; tapo galutinai aišku, jog slaptažodžių saugojimui reikia geresnių priemonių.&lt;/p&gt;

&lt;h1&gt;
  
  
  Apie IT saugumą gali kalbėti vos saujelė žmonių
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;Few false ideas have more firmly gripped the minds of so many intelligent men than the one that, if they just tried, they could invent a cipher that no one could break. - David Kahn &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Viena iš problemų kuri persekioja kibernetinio saugumo industriją, nekompetetingi žmonės, kurie turėdami paviršutiniškas žinias dedasi šios srities specialistais. Dėl to sistemose ir atsiranda tūkstančiai saugumo spragų. Tai klasikinis &lt;a href="https://en.wikipedia.org/wiki/Dunning%E2%80%93Kruger_effect" rel="noopener noreferrer"&gt;Dunning-Kruger efekto&lt;/a&gt; pavyzdys.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw0nzg2q0hvqvc4n465s5.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw0nzg2q0hvqvc4n465s5.jpg" alt="Alt Text" width="533" height="401"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tikri profesionalai, o ypač kriptografijos, dažniausiai būna labai kuklūs ir retai ką nors teigia užtikrintai, nes jie supranta, kad daugelis atsakymų priklauso nuo konteksto, detalių ir auditorijos išsilavinimo. Tad jei jaučiate, jog kažkas jums autoritetingai bando aiškinti apie IT saugumą - tikriausiai galite nustoti to žmogaus klausyti. Šitai, deja, galioja ir man :(&lt;/p&gt;

&lt;h1&gt;
  
  
  Kodėl salt'as ne panacėja
&lt;/h1&gt;

&lt;p&gt;Duomenų bazėse internete galima rasti šimtus milijonų nulaužtų slaptažodžių (paskaičiuotų hash'ų). Kalbu apie &lt;a href="https://crackstation.net" rel="noopener noreferrer"&gt;tas bazes&lt;/a&gt;, kuriose copy-paste pagalba galima iš hash'o atrasti slaptažodį.&lt;br&gt;&lt;br&gt;
Primenu, jog nebloga vaizdo plokštė sugeba paskaičiuoti kelis milijardus SHA1 hash'ų per sekundę. Taip pat primenu, jog salt'as, jeigu toks būtų, būtų gulėjęs duomenų bazėje šalia slaptažodžio. Tad paskaičiuoti pusės milijardo slaptažodžių SHA1 hash'us, prie kiekvieno pridedant unikalų salt'ą užtruktų nedaug ilgiau, nei to hash'o paieška duomenų bazėje. Tiesa, reikia pastebėti, jog naudojant salt, nebebūtų įmanoma suskaičiuoto slaptažodžio varianto patikrinti visame hash'ų sąraše, o reikėtų paskaičiuoti hash'ą kiekvienam vartotojui atskirai. &lt;/p&gt;

&lt;p&gt;Egzistuojant salt'ui, nebūtų įmanoma pompastiška slaptažodžio hash'o nulaužimo demonstracija naudojant copy-paste. Taip pat pailgėtų didelio slaptažodžių sąrašo nulaužimas, bet esmės tai nepakeistų, tik suteiktų įmonei daugiau argumentų nusimesti kaltę. &lt;/p&gt;

&lt;h1&gt;
  
  
  Kaip nulaužinėjami slaptažodžiai
&lt;/h1&gt;

&lt;p&gt;Yra du pagrindiniai slaptažodžių atakų tipai - online ir offline. Online - tai bandymas prisijungti prie pvz., web sistemos išmėginant įvairius slaptažodžius. Tokios atakos nepraktiškos, nes web sistema gali riboti prisijungimų skaičių, rodyti capcha ir pan.&lt;/p&gt;

&lt;p&gt;CityBee atveju aktuali offline ataka - vartotojų slaptažodžių hashus galima pasisiųsti į savo kompiuterį ir neribotai nulaužinėti.&lt;/p&gt;

&lt;p&gt;Viena populiariausių ir labiausiai išvystytų programų skaičiuoti hash'ams yra &lt;a href="https://hashcat.net/hashcat" rel="noopener noreferrer"&gt;HashCat&lt;/a&gt;, ji moka efektyviai išnaudoti vaizdo plokštę ir palaiko daugybę hash algoritmų. Iš esmės ką ji daro, tai užsikrauna nurodytą hash'ų sąrašą ir įvairiais būdais generuoja galimas raidžių kombinacijas, skaičiuoja hash'ą ir ieško ar toks hash'as yra sąraše. Visas įdomumas slepiasi po &lt;em&gt;"įvairiais būdais"&lt;/em&gt;, apie juos ir pakalbėkime.&lt;/p&gt;

&lt;p&gt;Kaip jau minėjau, bukai bandyti įvairias simbolių kombinacijas nepraktiška. Viskas priklauso nuo skaičiavimo pajėgumų, bet išbandyti net 9 simbolių kombinacijas yra keblu ir kiekvienas naujas simbolis eksponentiškai didina reikalingą nulaužimui laiką.&lt;/p&gt;

&lt;p&gt;Reikia pasitelkti išmonę, žodynus ir žodžių manipuliavimo taisykles. Žodynai - tai didžiuliai įvairių žodžių sąrašai, pavyzdžiui visi lietuviški žodžiai, aktorių vardai, prieš tai nutekėję slaptažodžiai ir t.t. Taisyklės - tai žodžių manipuliacijų formulės. Pavyzdžiui, imame kiekvieną žodį iš LT žodyno ir atliekam su juo 10000 manipuliacijų: pridedame simbolį &lt;em&gt;1&lt;/em&gt;, pakeičiame visus simbolius &lt;em&gt;a&lt;/em&gt; į &lt;em&gt;@&lt;/em&gt; ir t.t. Taip "nusilaužia" net tokie slaptažodžiai kaip &lt;em&gt;"Valkyre1986"&lt;/em&gt; ar "K1eti@k@s69". CityBee atveju tai sudaro &amp;gt;50% visų slaptažodžių, priklausomai nuo naudojamo žodyno.&lt;/p&gt;

&lt;p&gt;Sudėtingesniems slaptažodžiams atrasti galima naudoti žodynų kombinaciją, t.y. bandyti prie kiekvieno lietuviško žodžio lipdyti visus kitus įmanomus lietuviškus žodžius. Taip nusilaužia visi tokie slaptažodžiai kaip &lt;code&gt;LinksmasBebras1&lt;/code&gt; ir pan. &lt;/p&gt;

&lt;p&gt;Išsisėmus galima paimti jau nulaužtų slaptažodžių sąrašą ir pradėti kombinuoti jį su žodynais. Kaip sakoma - rinse and repeat. Tokiu būdu nusilaužia sudėtingesni slaptažodžiai, tokie kaip &lt;em&gt;"labasrytasmazule2020"&lt;/em&gt;, nes jau kažkas turėjo slaptažodį &lt;em&gt;"labasrytas"&lt;/em&gt; ir jis sėkmingai susikombinavo su papildomu žodžiu bei taisyklėmis.&lt;/p&gt;

&lt;p&gt;Tai be galo smagus procesas, dėl to &lt;a href="https://contest.korelogic.com" rel="noopener noreferrer"&gt;yra net konkursų&lt;/a&gt;, kur susirinkę mėgėjai varžosi, kas daugiau atras slaptažodžių. Žinoma, profesionalai turi sukaupę rimtus žodynus ir taisyklių rinkinius. Naudojantis nesudėtinga įranga ir RX5700XT vaizdo plokšte, per parą pavyko atkurti ~90% visų CityBee slaptažodžių (eksperimentui naudoti tik visiems viešai prienami duomenys). Tikiu, kad panaudojus, pvz., iš Darni Pora ar Filmai.in pavogtus visiškai atvirus slaptažodžius kaip žodyną, pavyktų išspausti dar vieną kitą procentą. Maždaug nuo 90% atkurtų slaptažodžių skaičius sunkiai auga, nes dalis žmonių naudoja password manager'ius, turi susigalvoję sudėtingus slaptažodžius ir pan.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz0crixn3aoxs5gf6xv5k.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz0crixn3aoxs5gf6xv5k.JPG" alt="HashCat-screenshot" width="800" height="474"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Minutėlę pabandykite įsivaizduoti kaip vyktų slaptažodžių nulaužinėjimas vietoj vieno kompiuterio panaudojus tokią vaizdo plokščių fermą:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6ay263zu3oyuwimu2fn9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6ay263zu3oyuwimu2fn9.png" alt="VGA farm" width="720" height="386"&gt;&lt;/a&gt;&lt;br&gt;
Tokios fermos išpopuliarėjo kartu su Bitcoin bumu (nes BitCoin kasimas irgi paremtas hash'ų skaičiavimu) ir dabar neretai panaudojamos slaptažodžių nulaužinėjimui. &lt;/p&gt;

&lt;p&gt;Slaptažodžiai "nulaužinėjimi" ne tik blogiems tikslams ar hobiui. Lygiai toks pats būdas naudojamas ir įmonėse audituojant savo vartotojus, kad jiems būtų galima pranešti apie žinomus nutekėjusius slaptažodžius. Deja, ne visos valstybės pakankamai supratingos, štai &lt;a href="https://iclg.com/practice-areas/cybersecurity-laws-and-regulations/germany" rel="noopener noreferrer"&gt;Vokietija kenčia&lt;/a&gt; nuo drakoniškų įstatymų labai ribojančių darbą saugumo srityje. Kiek žinau, Lietuvoje tai vis dar pilkoji zona, kur kiekvienas atvejis sprendžiamas individualiai ir etiniai įsilaužimai (angl. &lt;em&gt;ethical hacking&lt;/em&gt;) teisėsaugos vertinami labai selektyviai. Netgi aš, rašydamas šį edukacinį straipsnį, negaliu jaustis visiškai ramiai.&lt;/p&gt;

&lt;h1&gt;
  
  
  Kaip reikėtų saugoti slaptažodžius
&lt;/h1&gt;

&lt;p&gt;Labai paprasta, 80% naudos galima pasiekti su visiškai minimaliomis pastangomis. Tereikia vietoj SHA1 ar kito netinkamo algoritmo naudoti vieną iš slaptažodžiams pritaikytų: PBKDF2, Bcrypt, Scrypt, &lt;strong&gt;Argon2&lt;/strong&gt; ar pan. Argon2 šiuo metu yra de facto geriausias algoritmas. Apie tai, kaip gauti likusius 20% naudos, reikėtų atskiro straipsnio.&lt;/p&gt;

&lt;p&gt;Specialių algoritmų esmė yra tokia, kad jie paskaičiuojami lėtai (angl. &lt;em&gt;slow hashing&lt;/em&gt;). SHA1 hash'ą paskaičiuoti užtrunka nanosekundes, o, pvz., Argon2 turi konfigūruojamą parametrą (angl. &lt;em&gt;work factor&lt;/em&gt;), nurodantį, kiek ilgai hash algoritmas atliks operaciją. Jei paskaičiuoti slaptažodžio hash'ą ilgai užtrunka web sistemai, reiškia, jog ilgai užtruks ir tokių slaptažodžių nulaužinėjimas. Be to, Argon2 algoritmas labai prastai skaičiuojamas naudojant vaizdo plokštes ar kitą specialią įrangą.&lt;/p&gt;

&lt;p&gt;Yra ir krūva kitų priemonių apsaugoti slaptažodžiams, pavyzdžiui finansų įstaigos naudoja dedikuotą įrangą (&lt;a href="https://en.wikipedia.org/wiki/Hardware_security_module" rel="noopener noreferrer"&gt;HSM&lt;/a&gt;), skirtą būtent šifravimo operacijoms atlikti. Svarbiausia nepatikėti tokių svarbių sprendimų žmonėms, kurie turi mažai ką bendro su saugumu, nes tuomet būna "išrandami" įvairūs algoritmai, kurie atneša daugiau gėdos, nei naudos. Pavyzdžiui, šiek tiek prakutęs programuotojas gali pasiūlyti vietoj ar šalia &lt;em&gt;salt&lt;/em&gt; naudoti &lt;a href="https://en.wikipedia.org/wiki/Pepper_(cryptography)" rel="noopener noreferrer"&gt;&lt;em&gt;pepper&lt;/em&gt;&lt;/a&gt; metodą, kuris gal ir nepakenks, bet didelė tikimybė, jog sukurs klaidinančią saugumo iliuziją. OWASP organizacija teikia rekomendacijas ir siūlo gerąsias saugumo praktikas, įskaitant ir &lt;a href="https://cheatsheetseries.owasp.org/cheatsheets/Password_Storage_Cheat_Sheet.html" rel="noopener noreferrer"&gt;slaptažodžių saugojimą&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Mano asmenine nuomone, kiekviena įmonė, dirbanti su klientų duomenimis turėtų užsisakyti išorinio konsultanto ar audito paslaugas. Ir nebūtina tam leisti tūkstančių pinigų, bei pirkti konsultantų siūlomos programinės įrangos. Dažnu atveju pakaktų freelancer'io, kuris padėtų į savo sistemą pažiūrėti iš šalies.&lt;br&gt;
Tikiuosi suprasti duomenų apsaugos svarbą padės karti nukentėjusių įmonių patirtis ir baudos, kurias jos gaus už aplaidumą.&lt;/p&gt;

&lt;p&gt;Ir kaip visada - nepaisant to, jog šiame straipsnyje aiškinau techninius dalykus, didžiausia problema išlieka žmonės. Galima naudoti kokius nori algoritmus, bet jei admin'as netyčia sugalvos išsaugoti visą į sistemą įeinantį srautą, &lt;a href="https://www.zdnet.com/article/twitter-says-bug-exposed-passwords-in-plaintext" rel="noopener noreferrer"&gt;kartu išsisaugos ir asmeniniai duomenys prieš juos tinkamai užšifruojant&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you think cryptography is the answer to your problem, then you don't know what your problem is. - Peter G. Neumann&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>hashing</category>
      <category>security</category>
      <category>passwords</category>
      <category>citybee</category>
    </item>
  </channel>
</rss>
