<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Cryptography on Wilhelm Maritz</title><link>https://wjmaritz.dev/tags/cryptography/</link><description>Recent content in Cryptography on Wilhelm Maritz</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Sun, 24 Aug 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://wjmaritz.dev/tags/cryptography/index.xml" rel="self" type="application/rss+xml"/><item><title>Use secrets, not random, and remember the shuffle</title><link>https://wjmaritz.dev/posts/secrets-not-random/</link><pubDate>Sun, 24 Aug 2025 00:00:00 +0000</pubDate><guid>https://wjmaritz.dev/posts/secrets-not-random/</guid><description>&lt;p>Python gives you two ways to pick something at random, and only one of them belongs anywhere near a password.&lt;/p>
&lt;p>&lt;code>random&lt;/code> is a Mersenne Twister. It is fast, it is reproducible, and that second property is exactly the problem: it is a deterministic algorithm driven by internal state. Observe enough of its output and you can recover that state and predict everything it will produce next. For a dice roll or a shuffled playlist, wonderful. For anything that guards access, disqualifying.&lt;/p></description></item></channel></rss>