<?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: Roco</title>
    <description>The latest articles on DEV Community by Roco (@sekyuriti).</description>
    <link>https://dev.to/sekyuriti</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%2F3731317%2F23a805f7-df2c-4eb1-aeb6-7a0c9d1235ef.jpg</url>
      <title>DEV Community: Roco</title>
      <link>https://dev.to/sekyuriti</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sekyuriti"/>
    <language>en</language>
    <item>
      <title>We replaced reCAPTCHA and haven't looked back</title>
      <dc:creator>Roco</dc:creator>
      <pubDate>Sun, 01 Feb 2026 12:30:05 +0000</pubDate>
      <link>https://dev.to/sekyuriti/we-replaced-recaptcha-and-havent-looked-back-2k37</link>
      <guid>https://dev.to/sekyuriti/we-replaced-recaptcha-and-havent-looked-back-2k37</guid>
      <description>&lt;h2&gt;
  
  
  Why we ditched reCAPTCHA
&lt;/h2&gt;

&lt;p&gt;We had reCAPTCHA on our signup form. Standard stuff.&lt;/p&gt;

&lt;p&gt;Then we looked at the analytics. 15% of users who started the signup flow dropped off at the CAPTCHA step. Fifteen percent.&lt;/p&gt;

&lt;p&gt;Some of them probably were bots. But most? Regular people who didn't want to click on traffic lights.&lt;/p&gt;

&lt;p&gt;We get it. We hate those things too.&lt;/p&gt;

&lt;h2&gt;
  
  
  The search for alternatives
&lt;/h2&gt;

&lt;p&gt;We looked at:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;hCaptcha&lt;/strong&gt; - Same problem, different pictures&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Invisible reCAPTCHA&lt;/strong&gt; - Better, but still shows challenges sometimes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Turnstile&lt;/strong&gt; - Decent, but we wanted more control&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of them gave us what we wanted: verification that's truly invisible to legitimate users.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we built
&lt;/h2&gt;

&lt;p&gt;GATE. Human verification without puzzles.&lt;/p&gt;

&lt;p&gt;It works by combining three things:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Behavioral analysis&lt;/strong&gt; - How does the user interact with the page? Mouse movements, scroll patterns, keyboard timing. Humans are messy. Bots are perfect.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Proof of work&lt;/strong&gt; - The browser solves a small computational puzzle. Trivial for a single user. Expensive at scale for bot operators.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Environment detection&lt;/strong&gt; - Is this a real browser? Are dev tools open? Is it running headless?&lt;/p&gt;

&lt;p&gt;All of this happens in the background. The user fills out the form normally. By the time they click submit, we already have a verdict.&lt;/p&gt;

&lt;h2&gt;
  
  
  The score
&lt;/h2&gt;

&lt;p&gt;Each visitor gets a score from 0-100. You decide the threshold.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;90+ is almost certainly human&lt;/li&gt;
&lt;li&gt;70-89 is probably human&lt;/li&gt;
&lt;li&gt;50-69 is suspicious&lt;/li&gt;
&lt;li&gt;Below 50 is likely automated&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We set our threshold at 60. Aggressive, but our use case tolerates some false positives.&lt;/p&gt;

&lt;h2&gt;
  
  
  Implementation
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://gate.sekyuriti.build/v1/gate.js"&lt;/span&gt; &lt;span class="na"&gt;data-site-key=&lt;/span&gt;&lt;span class="s"&gt;"your-key"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On form submit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;token&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;gate&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getToken&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="c1"&gt;// Send token to your backend for verification&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Backend:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;gate&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;verify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;secretKey&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;valid&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Handle bot&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Results
&lt;/h2&gt;

&lt;p&gt;After switching:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Signup completion: up 12%&lt;/li&gt;
&lt;li&gt;Bot signups: down 94%&lt;/li&gt;
&lt;li&gt;Support tickets about CAPTCHAs: zero&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Honest downsides
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;It's not free at scale (but neither is reCAPTCHA Enterprise)&lt;/li&gt;
&lt;li&gt;Very old browsers might have issues&lt;/li&gt;
&lt;li&gt;Some privacy-focused users with heavy blocking might get low scores&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;Free tier available. No credit card required.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://sekyuriti.build/modules/gate" rel="noopener noreferrer"&gt;sekyuriti.build/modules/gate&lt;/a&gt;&lt;/p&gt;

</description>
      <category>captcha</category>
      <category>security</category>
      <category>ux</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Blocking bots without blocking users: what actually works</title>
      <dc:creator>Roco</dc:creator>
      <pubDate>Fri, 30 Jan 2026 12:30:02 +0000</pubDate>
      <link>https://dev.to/sekyuriti/blocking-bots-without-blocking-users-what-actually-works-49ao</link>
      <guid>https://dev.to/sekyuriti/blocking-bots-without-blocking-users-what-actually-works-49ao</guid>
      <description>&lt;h2&gt;
  
  
  The bot problem
&lt;/h2&gt;

&lt;p&gt;We run APIs. Nothing special, just services that people pay for.&lt;/p&gt;

&lt;p&gt;One day we noticed weird traffic patterns. Thousands of requests from the same endpoints, perfect timing, no mouse movements before the clicks. Bots.&lt;/p&gt;

&lt;p&gt;They weren't doing anything malicious per se. Just scraping data and abusing free tiers. But they were costing us money and slowing things down for real users.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we tried first
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Rate limiting by IP&lt;/strong&gt; - Useless. Residential proxies are cheap. They just rotate IPs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CAPTCHAs&lt;/strong&gt; - Users hated it. Conversion dropped. And there are CAPTCHA-solving services anyway.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;User agent checks&lt;/strong&gt; - Trivial to fake.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Honeypot fields&lt;/strong&gt; - Caught maybe 10% of bots.&lt;/p&gt;

&lt;p&gt;None of this worked well enough.&lt;/p&gt;

&lt;h2&gt;
  
  
  The real question
&lt;/h2&gt;

&lt;p&gt;How do you tell a human from a bot?&lt;/p&gt;

&lt;p&gt;Humans are chaotic. They move their mouse in curves. They pause to read. They scroll at irregular intervals. They make typos.&lt;/p&gt;

&lt;p&gt;Bots are mechanical. Perfect timing. Straight-line mouse movements (if any). No reading time. Predictable patterns.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we built
&lt;/h2&gt;

&lt;p&gt;ATTEST. An API protection layer that analyzes request authenticity.&lt;/p&gt;

&lt;p&gt;It looks at:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Browser fingerprint consistency&lt;/li&gt;
&lt;li&gt;Request timing patterns
&lt;/li&gt;
&lt;li&gt;Environment signals (headless browser detection)&lt;/li&gt;
&lt;li&gt;Behavioral patterns from the frontend&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each request gets a score. You set the threshold for what gets through.&lt;/p&gt;

&lt;h2&gt;
  
  
  Implementation
&lt;/h2&gt;

&lt;p&gt;Server-side, you verify the attestation token:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;attest&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;verify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;x-attest-token&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;

&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;valid&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;score&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;70&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;403&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;error&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Verification failed&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The frontend SDK collects signals and generates tokens. The backend verifies them.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it catches
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Headless browsers (Puppeteer, Playwright)&lt;/li&gt;
&lt;li&gt;Basic HTTP clients (curl, Python requests)&lt;/li&gt;
&lt;li&gt;Most commercial scraping tools&lt;/li&gt;
&lt;li&gt;Automated form submissions&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What it doesn't catch
&lt;/h2&gt;

&lt;p&gt;Sophisticated attackers who instrument real browsers, solve challenges manually, and mimic human behavior perfectly. But those are rare and expensive to operate at scale.&lt;/p&gt;

&lt;h2&gt;
  
  
  The trade-off
&lt;/h2&gt;

&lt;p&gt;False positives happen. Legitimate users with unusual setups (Tor, heavy privacy extensions, very old browsers) might get flagged. You tune the threshold based on your tolerance.&lt;/p&gt;

&lt;p&gt;We run ours at 65. Blocks most bots, rarely affects real users.&lt;/p&gt;

&lt;h2&gt;
  
  
  Details
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://sekyuriti.build/modules/attest" rel="noopener noreferrer"&gt;sekyuriti.build/modules/attest&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Free tier available for testing.&lt;/p&gt;

</description>
      <category>api</category>
      <category>security</category>
      <category>webdev</category>
      <category>bots</category>
    </item>
    <item>
      <title>Your JavaScript source code is public. Here's what we do about it.</title>
      <dc:creator>Roco</dc:creator>
      <pubDate>Wed, 28 Jan 2026 12:30:03 +0000</pubDate>
      <link>https://dev.to/sekyuriti/your-javascript-source-code-is-public-heres-what-we-do-about-it-589d</link>
      <guid>https://dev.to/sekyuriti/your-javascript-source-code-is-public-heres-what-we-do-about-it-589d</guid>
      <description>&lt;h2&gt;
  
  
  A reality check
&lt;/h2&gt;

&lt;p&gt;Open your browser. Go to any website. Press F12. Click Sources.&lt;/p&gt;

&lt;p&gt;Congratulations, you can now read their JavaScript.&lt;/p&gt;

&lt;p&gt;Sure, it might be minified. But minified isn't protected. There are tools that un-minify code in seconds. Your variable names might be mangled, but the logic is right there.&lt;/p&gt;

&lt;p&gt;For most websites, this doesn't matter. But if you're building:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;License checks&lt;/li&gt;
&lt;li&gt;Proprietary algorithms&lt;/li&gt;
&lt;li&gt;Anti-cheat logic&lt;/li&gt;
&lt;li&gt;Premium features&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;...having that code readable is a problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  What obfuscation actually does
&lt;/h2&gt;

&lt;p&gt;Let us be clear: obfuscation is not encryption. A determined attacker with enough time will figure it out. That's not the point.&lt;/p&gt;

&lt;p&gt;The point is making the cost of reverse-engineering higher than the value of what you're protecting.&lt;/p&gt;

&lt;p&gt;If it takes someone 40 hours to understand your license check, and your software costs $20, most people will just pay. Economics.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we built
&lt;/h2&gt;

&lt;p&gt;CLOAK. JavaScript protection that goes beyond basic minification.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx @sekyuriti/cloak protect src/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It does a few things:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Control flow flattening&lt;/strong&gt; - Your nice, readable if/else statements become a state machine. Good luck following the logic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;String encryption&lt;/strong&gt; - Strings like API endpoints and error messages get encrypted. They're decrypted at runtime.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Domain locking&lt;/strong&gt; - Code only runs on specified domains. Someone copies your JS to their site? It doesn't execute.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Expiration dates&lt;/strong&gt; - Time-limited code. Useful for trials or beta releases.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dead code injection&lt;/strong&gt; - Fake code paths that do nothing but confuse anyone reading it.&lt;/p&gt;

&lt;h2&gt;
  
  
  An honest assessment
&lt;/h2&gt;

&lt;p&gt;Will this stop a skilled reverse engineer? No. Given enough time, anything can be cracked.&lt;/p&gt;

&lt;p&gt;Will this stop 99% of casual copying? Yes.&lt;/p&gt;

&lt;p&gt;Will this make the 1% spend significant time? Also yes.&lt;/p&gt;

&lt;p&gt;That's the trade-off. You're not buying invincibility. You're buying friction.&lt;/p&gt;

&lt;h2&gt;
  
  
  Performance
&lt;/h2&gt;

&lt;p&gt;The protected code is slower. How much depends on the protection level. Light protection is barely noticeable. Heavy protection can add 20-30% overhead.&lt;/p&gt;

&lt;p&gt;We recommend protecting only sensitive files, not your entire codebase.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx @sekyuriti/cloak protect ./src/license-check.js &lt;span class="nt"&gt;--domain&lt;/span&gt; yourdomain.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Details at &lt;a href="https://sekyuriti.build/modules/cloak" rel="noopener noreferrer"&gt;sekyuriti.build/modules/cloak&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>security</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>We got tired of users asking "is this file legit?" so we built a verification system</title>
      <dc:creator>Roco</dc:creator>
      <pubDate>Mon, 26 Jan 2026 12:30:01 +0000</pubDate>
      <link>https://dev.to/sekyuriti/we-got-tired-of-users-asking-is-this-file-legit-so-we-built-a-verification-system-29na</link>
      <guid>https://dev.to/sekyuriti/we-got-tired-of-users-asking-is-this-file-legit-so-we-built-a-verification-system-29na</guid>
      <description>&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;We distribute software. Installers, mods, assets. The usual.&lt;/p&gt;

&lt;p&gt;Every week we get messages like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Hey I downloaded this from some forum, is it real?"&lt;/li&gt;
&lt;li&gt;"Someone shared your file on Discord, should I trust it?"&lt;/li&gt;
&lt;li&gt;"How do I know this wasn't tampered with?"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We used to tell them to check the SHA-256 hash. Nobody does that. They don't know how, and honestly, it's a pain.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we wanted
&lt;/h2&gt;

&lt;p&gt;A simple way for anyone to verify if a file is legitimate. No technical knowledge required. Just drag, drop, done.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we built
&lt;/h2&gt;

&lt;p&gt;TRACE. A file verification system.&lt;/p&gt;

&lt;p&gt;As the creator, you register your files:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx @sekyuriti/trace register installer.exe
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This gives you a TRACE ID like &lt;code&gt;TRC.A7X2.9K4M&lt;/code&gt;. Share this ID alongside your downloads.&lt;/p&gt;

&lt;p&gt;When someone downloads your file from wherever, they verify it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx @sekyuriti/trace verify installer.exe
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or they can just drag the file to &lt;a href="https://sekyuriti.build/trace" rel="noopener noreferrer"&gt;sekyuriti.build/trace&lt;/a&gt; if they don't want to use the terminal.&lt;/p&gt;

&lt;p&gt;If the hashes match, it's real. If not, someone modified it.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;

&lt;p&gt;Nothing fancy. When you register a file:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;SHA-256 hash is computed locally (your file never leaves your machine)&lt;/li&gt;
&lt;li&gt;Hash + metadata gets stored in our database&lt;/li&gt;
&lt;li&gt;You get a TRACE ID&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;When someone verifies:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;They compute the hash locally&lt;/li&gt;
&lt;li&gt;We check if that hash exists&lt;/li&gt;
&lt;li&gt;If yes, we show who registered it and when&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That's it. The file itself is never uploaded anywhere.&lt;/p&gt;

&lt;h2&gt;
  
  
  The "aha" moment
&lt;/h2&gt;

&lt;p&gt;A user messaged us last week. They downloaded a mod from a sketchy reupload site. Before installing, they ran the verify command. Hash matched. They knew it was safe.&lt;/p&gt;

&lt;p&gt;That's the whole point. Trust, but verify.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;If you distribute files and deal with the same "is this legit" questions, give it a shot:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://sekyuriti.build/modules/trace" rel="noopener noreferrer"&gt;sekyuriti.build/modules/trace&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Free tier covers most use cases. Questions welcome.&lt;/p&gt;

</description>
      <category>security</category>
      <category>opensource</category>
      <category>webdev</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
