<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>Colas.Nahaboo.net - security</title>
    <subtitle>Colas Nahaboo personal site, with discussions about programming code, web and computing topics, surfing and SUPing, and various musings.</subtitle>
    <link rel="self" type="application/atom+xml" href="https://colas.nahaboo.net/tags/security/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://colas.nahaboo.net"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-08-05T00:00:00+00:00</updated>
    <id>https://colas.nahaboo.net/tags/security/atom.xml</id>
    <entry xml:lang="en">
        <title>passgen: a password generator with a memory</title>
        <published>2026-08-05T00:00:00+00:00</published>
        <updated>2026-08-05T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://colas.nahaboo.net/code/passgen-a-password-generator-with-a-memory/"/>
        <id>https://colas.nahaboo.net/code/passgen-a-password-generator-with-a-memory/</id>
        
        <content type="html" xml:base="https://colas.nahaboo.net/code/passgen-a-password-generator-with-a-memory/">&lt;p&gt;I just added &lt;strong&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com/ColasNahaboo/colas-bash-lib/blob/master/bin/passgen&quot;&gt;passgen&lt;/a&gt;&lt;/strong&gt;, a password generator, to my &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com/ColasNahaboo/colas-bash-lib&quot;&gt;colas-bash-lib&lt;/a&gt; collection. It is a tool that lives in your terminal, generates a password, copies it to your clipboard, and keeps a private log of what it generated and for what.&lt;/p&gt;
&lt;p&gt;Why a log, you may ask. Because the biggest password problem is not generating strong ones, it is remembering which password goes where. My log solves it in the laziest possible way: I search it when I need to know which password I used for a given site.&lt;/p&gt;
&lt;h2 id=&quot;what-it-does&quot;&gt;What it does&lt;a class=&quot;zola-anchor&quot; href=&quot;#what-it-does&quot; aria-label=&quot;Anchor link for: what-it-does&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;passgen&lt;/code&gt; generates a password of length 24 by default, made of lowercase letters, uppercase, digits, and a few special characters. It is careful about the details:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It starts with a lowercase letter, so the password is a valid identifier anywhere.&lt;/li&gt;
&lt;li&gt;It deliberately avoids the zero character, to prevent confusion with the letter O.&lt;/li&gt;
&lt;li&gt;The special characters are limited to &lt;code&gt;-%=+_^/~?.&lt;/code&gt; — the ones that survive a &lt;strong&gt;double-click&lt;/strong&gt; to select the whole password, which is the way I copy things from a terminal.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Then it copies the password to your clipboard, on Wayland or X11 alike. No need to select it yourself.&lt;/p&gt;
&lt;h2 id=&quot;the-log&quot;&gt;The log&lt;a class=&quot;zola-anchor&quot; href=&quot;#the-log&quot; aria-label=&quot;Anchor link for: the-log&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Every generated password is appended to &lt;code&gt;~/.local/state/passgen/log&lt;/code&gt;, with a date and an optional note. I use it this way:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;passgen -l&lt;/code&gt; lists the last passwords generated, so I can find the one for a given site.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;passgen 32 facebook&lt;/code&gt; generates a 32-character password and logs it as the &quot;facebook&quot; one.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The log is chmod&#39;ed to be readable only by me, and I keep it in sync and backed up like the rest of my home directory. It replaced my password manager for everything but shared secrets.&lt;/p&gt;
&lt;h2 id=&quot;checking-the-strength&quot;&gt;Checking the strength&lt;a class=&quot;zola-anchor&quot; href=&quot;#checking-the-strength&quot; aria-label=&quot;Anchor link for: checking-the-strength&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;passgen -s 24&lt;/code&gt; prints the strength of a password of that length in number of combinations, which for 24 characters is about 10^42 — comfortably future-proof even against quantum computers. The default length of 24 is chosen for exactly that reason.&lt;/p&gt;
&lt;h2 id=&quot;why-i-like-it&quot;&gt;Why I like it&lt;a class=&quot;zola-anchor&quot; href=&quot;#why-i-like-it&quot; aria-label=&quot;Anchor link for: why-i-like-it&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;One tool, one habit&lt;/strong&gt;: no account, no sync, no database, nothing to learn. Generate, paste, done.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The password is in my control&lt;/strong&gt;, stored in a plain file I can grep, rsync, and back up with the rest of my life.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Useful in a script&lt;/strong&gt;: pipe it, adapt the length, add a note. It composes like any other command-line tool.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;See it and the rest of my bash functions at &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com/ColasNahaboo/colas-bash-lib&quot;&gt;colas-bash-lib&lt;/a&gt;.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>I recovered my Facebook account, read how</title>
        <published>2026-04-28T00:00:00+00:00</published>
        <updated>2026-04-28T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://colas.nahaboo.net/blog/i-recovered-my-facebook-account-read-how/"/>
        <id>https://colas.nahaboo.net/blog/i-recovered-my-facebook-account-read-how/</id>
        
        <content type="html" xml:base="https://colas.nahaboo.net/blog/i-recovered-my-facebook-account-read-how/">&lt;h2 id=&quot;what-happened&quot;&gt;What happened&lt;a class=&quot;zola-anchor&quot; href=&quot;#what-happened&quot; aria-label=&quot;Anchor link for: what-happened&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;On 2024-10-24, &lt;a href=&quot;https://colas.nahaboo.net/blog/my-facebook-account-has-changed-hacked/&quot;&gt;my Facebook account was hacked&lt;/a&gt;. Alas, Facebook did not allow me to get back my account, or even report the account as compromised, without entering the current password that whad been changed by the hackers. So I had to create a new account, and moved on.&lt;/p&gt;
&lt;p&gt;However, I recently created a test account on Instagram, to try to generate RSS feeds to follow Instagram accounts more comfortably via my RSS-Bridge. And I was surprised to see that my &quot;new&quot; account was in fact the account of another user that had been blocked, then unblocked.&lt;/p&gt;
&lt;p&gt;This prompted me to try to re-log into my old Facebook account and... it worked! &lt;strong&gt;I was able to reset the password&lt;/strong&gt; without knowing the current one.
I thus will remove the new account after some time.&lt;/p&gt;
&lt;h2 id=&quot;nice-but-why&quot;&gt;Nice, but why?&lt;a class=&quot;zola-anchor&quot; href=&quot;#nice-but-why&quot; aria-label=&quot;Anchor link for: nice-but-why&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;But looking a bit (for instance about &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://riskbasedauthentication.org/state-of-practice/&quot;&gt;Risk-Based Authentication (RBA)&lt;/a&gt;, it appears I was lucky to try to re-use my account just days after a 6 month delay: Facebook relaxes accounts the security measures 6 months after a detected suspicious activity!&lt;/p&gt;
&lt;p&gt;The behavior I experienced — being blocked from recovery despite having valid contact info, followed by a sudden &quot;opening&quot; of access — is apparently a documented pattern in Facebook’s security ecosystem, notably their &lt;strong&gt;automated risk assessment&lt;/strong&gt; procedures.&lt;/p&gt;
&lt;h3 id=&quot;the-security-freeze-why-i-was-stuck&quot;&gt;The &quot;Security Freeze&quot; (Why I was stuck)&lt;a class=&quot;zola-anchor&quot; href=&quot;#the-security-freeze-why-i-was-stuck&quot; aria-label=&quot;Anchor link for: the-security-freeze-why-i-was-stuck&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;When a hijacker changes a password, Facebook’s &quot;Trusted Device&quot; and &quot;Location&quot; protocols often trigger a lock. Even if my email and phone were correct, Facebook may refuse a reset if:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I cannot provide the current password, aka &lt;strong&gt;The &quot;Current Password&quot; Requirement&lt;/strong&gt;. This is a common defensive measure when Facebook detects a &quot;conflict of ownership.&quot; If the system sees two different locations (mine and the hacker&#39;s) trying to claim the account, it often demands the &lt;em&gt;current&lt;/em&gt; password to prevent the owner from being &quot;kicked out&quot; by someone who isn&#39;t actually the owner. Needless to say, this is a really bad design, as hackers first move is to change the password.&lt;/li&gt;
&lt;li&gt;I use another browser. As I tried many ways to recover my account, I also tried to use another browser on another machine, to start afresh. But this failed Facebook &lt;strong&gt;IP Reputation&lt;/strong&gt; detection: Seeing I was trying to recover the account from a network or device the system didn&#39;t &quot;trust&quot; at that moment, it applied the most restrictive recovery path to the account.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;why-it-suddenly-worked-the-6-months-cooldown-period&quot;&gt;Why it suddenly worked (The 6 months &quot;Cooldown&quot; Period)&lt;a class=&quot;zola-anchor&quot; href=&quot;#why-it-suddenly-worked-the-6-months-cooldown-period&quot; aria-label=&quot;Anchor link for: why-it-suddenly-worked-the-6-months-cooldown-period&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Nothing is actually officially documented, but here is the likely scenario:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Risk Score Decay:&lt;/strong&gt; After 6 months of inactivity (or if the hacker eventually triggered a &quot;Security Lock&quot; that made the account go dormant), the &quot;Risk Score&quot; associated with the account drops.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Account Dormancy:&lt;/strong&gt; Facebook often flags accounts that have been compromised as &quot;checkpointed.&quot; After a certain period of time without successful logins from the hijacker, the system may lower the threshold for recovery for the &lt;em&gt;original&lt;/em&gt; owner, especially if he are using a device or IP address that was associated with the account for years before the hack.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The &quot;Verification Reset&quot;:&lt;/strong&gt; Facebook occasionally clears the &quot;verification debt&quot; on accounts. If the hacker was blocked by Facebook’s automated systems (e.g., for spamming), the account enters a state where the next person to provide valid 2FA or email confirmation is granted access without the &quot;current password&quot; hurdle.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All of this is totally automated, with no human intervention, by the system&#39;s &lt;strong&gt;&quot;Identity Verification&quot;&lt;/strong&gt; logic resetting itself after a period of dormancy. Once the &quot;Pirate&quot; was no longer active, the system stopped viewing my recovery attempt as a &quot;hostile takeover&quot; and allowed the standard email/phone reset to work.&lt;/p&gt;
&lt;h3 id=&quot;summary-of-known-behavior&quot;&gt;Summary of Known Behavior&lt;a class=&quot;zola-anchor&quot; href=&quot;#summary-of-known-behavior&quot; aria-label=&quot;Anchor link for: summary-of-known-behavior&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: left&quot;&gt;Stage&lt;/th&gt;&lt;th style=&quot;text-align: left&quot;&gt;System Logic&lt;/th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Result&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Initial Hack&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;High-conflict state; system protects the &quot;active&quot; user.&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Recovery denied despite valid email.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;The 6-Month Gap&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Account goes dormant or hacker is &quot;checkpointed.&quot;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Security tension on the account relaxes.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Recovery&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;System recognizes you are the owner IP/Location and valid contact info.&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Password reset allowed without &quot;Current Password.&quot;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h3 id=&quot;what-to-do-once-the-account-is-recovered&quot;&gt;What to do once the account is recovered&lt;a class=&quot;zola-anchor&quot; href=&quot;#what-to-do-once-the-account-is-recovered&quot; aria-label=&quot;Anchor link for: what-to-do-once-the-account-is-recovered&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Check the Settings for &lt;strong&gt;&quot;Saved Login&quot;&lt;/strong&gt;, &lt;strong&gt;&quot;Where you&#39;re logged in&quot;&lt;/strong&gt;, and &lt;strong&gt;&quot;Apps and websites&quot;&lt;/strong&gt; immediately. Sometimes hackers leave a &quot;backdoor&quot; by authorizing a specific browser or app that doesn&#39;t require a password.&lt;/li&gt;
&lt;li&gt;Change the password, enable 2FA (Two-factor authentication).&lt;/li&gt;
&lt;li&gt;Remove all apps connected to the account.&lt;/li&gt;
&lt;li&gt;Check other sites that authorized logins from this Facebook account, change their passwords andf look for suspicious activity.&lt;/li&gt;
&lt;/ul&gt;
</content>
        
    </entry>
</feed>
