<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: emboss</title><link>https://news.ycombinator.com/user?id=emboss</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Thu, 29 Oct 2026 21:08:22 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=emboss" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by emboss in "Text-First: If It Can Be Text, It Should Be Text"]]></title><description><![CDATA[
<p>Author here. My first blog post after more than thirteen years, but I had to talk about something that matters to me. "Coding is solved"? We'll see. But if anything is close to solved, it's documentation. AI has been better than us at docs basically from day one. Which is fine with me - nobody likes writing documentation anyway. On the other hand, we're all happy when it's there and well-maintained. Documentation has finally become affordable.<p>I'm surprised by how many people in my workshops still complain about wildly varying results with today's models. In my experience that's almost always a context problem, not a model problem. The post argues for keeping that context as plain Markdown in the repo, so it also serves as documentation for humans. This is Spec-Driven Development, but with the tools you already have. I'm wary of existing SDD frameworks: they often feel a bit too heavy for my taste. Since things are evolving at breakneck speed, I also would like to avoid any kind of abstraction lock-in.<p>Feel free to try it out yourself. A simple demo with the full run: <a href="https://github.com/emboss/text-first-demo" rel="nofollow">https://github.com/emboss/text-first-demo</a> (start from the bare-repo branch, compare with the implementation branch, which shows one sample run). I'd be especially interested in where this breaks down for you in brownfield codebases.</p>
]]></description><pubDate>Wed, 28 Oct 2026 15:02:46 +0000</pubDate><link>https://news.ycombinator.com/item?id=50274857</link><dc:creator>emboss</dc:creator><comments>https://news.ycombinator.com/item?id=50274857</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=50274857</guid></item><item><title><![CDATA[Text-First: If It Can Be Text, It Should Be Text]]></title><description><![CDATA[
<p>Article URL: <a href="https://martinbosslet.dev/en/blog/2026/text-first/">https://martinbosslet.dev/en/blog/2026/text-first/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=50274856">https://news.ycombinator.com/item?id=50274856</a></p>
<p>Points: 3</p>
<p># Comments: 1</p>
]]></description><pubDate>Wed, 28 Oct 2026 15:02:46 +0000</pubDate><link>https://martinbosslet.dev/en/blog/2026/text-first/</link><dc:creator>emboss</dc:creator><comments>https://news.ycombinator.com/item?id=50274856</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=50274856</guid></item><item><title><![CDATA[New comment by emboss in "SHA-3 Standard [pdf]"]]></title><description><![CDATA[
<p>General-purpose hash functions should be as efficient as possible. That's why they shouldn't be used for password hashing directly. There are special hash functions (slow, memory-intensive, hard to parallelize) for storing password hashes: <a href="https://password-hashing.net/" rel="nofollow">https://password-hashing.net/</a></p>
]]></description><pubDate>Wed, 05 Aug 2015 19:11:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=10012120</link><dc:creator>emboss</dc:creator><comments>https://news.ycombinator.com/item?id=10012120</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=10012120</guid></item><item><title><![CDATA[OpenSSL PRNG is not (really) fork-safe]]></title><description><![CDATA[
<p>Article URL: <a href="http://martinbosslet.de/blog/2013/08/21/openssl-prng-is-not-really-fork-safe/">http://martinbosslet.de/blog/2013/08/21/openssl-prng-is-not-really-fork-safe/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=6258108">https://news.ycombinator.com/item?id=6258108</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Thu, 22 Aug 2013 16:23:39 +0000</pubDate><link>http://martinbosslet.de/blog/2013/08/21/openssl-prng-is-not-really-fork-safe/</link><dc:creator>emboss</dc:creator><comments>https://news.ycombinator.com/item?id=6258108</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=6258108</guid></item><item><title><![CDATA[E-Mail Made in Germany - Really?]]></title><description><![CDATA[
<p>Article URL: <a href="http://martinbosslet.de/blog/2013/08/11/e-mail-made-in-germany-really/">http://martinbosslet.de/blog/2013/08/11/e-mail-made-in-germany-really/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=6196081">https://news.ycombinator.com/item?id=6196081</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Sun, 11 Aug 2013 19:55:36 +0000</pubDate><link>http://martinbosslet.de/blog/2013/08/11/e-mail-made-in-germany-really/</link><dc:creator>emboss</dc:creator><comments>https://news.ycombinator.com/item?id=6196081</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=6196081</guid></item><item><title><![CDATA[We need to sign Ruby gems! But how?]]></title><description><![CDATA[
<p>Article URL: <a href="http://emboss.github.com/blog/2013/02/15/we-need-to-sign-ruby-gems-but-how/">http://emboss.github.com/blog/2013/02/15/we-need-to-sign-ruby-gems-but-how/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=5235178">https://news.ycombinator.com/item?id=5235178</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Sun, 17 Feb 2013 13:51:22 +0000</pubDate><link>http://emboss.github.com/blog/2013/02/15/we-need-to-sign-ruby-gems-but-how/</link><dc:creator>emboss</dc:creator><comments>https://news.ycombinator.com/item?id=5235178</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=5235178</guid></item><item><title><![CDATA[New comment by emboss in "Breaking Murmur: Hash-flooding DoS Reloaded"]]></title><description><![CDATA[
<p>Hmm, that's an interesting idea. Although I could imagine that this approach ultimately leads to something like Universal Hashing. For example, if the functions you would use in your example are not randomized in some way, an attacker could still predict predict outputs and when the switches would be made and could adapt appropriately. So you would randomize your functions. From there, it is probably not too far until we end up with Universal Hashing. Still, very interesting thought!</p>
]]></description><pubDate>Sat, 15 Dec 2012 02:44:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=4924425</link><dc:creator>emboss</dc:creator><comments>https://news.ycombinator.com/item?id=4924425</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=4924425</guid></item><item><title><![CDATA[New comment by emboss in "Breaking Murmur: Hash-flooding DoS Reloaded"]]></title><description><![CDATA[
<p>Thank you! I hope we (or others) can manage to break some more hashes to raise the awareness of this problem! See also this nice example for btrfs:<p><a href="http://crypto.junod.info/2012/12/13/hash-dos-and-btrfs/" rel="nofollow">http://crypto.junod.info/2012/12/13/hash-dos-and-btrfs/</a></p>
]]></description><pubDate>Sat, 15 Dec 2012 02:38:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=4924413</link><dc:creator>emboss</dc:creator><comments>https://news.ycombinator.com/item?id=4924413</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=4924413</guid></item><item><title><![CDATA[Breaking Murmur: Hash-flooding DoS Reloaded]]></title><description><![CDATA[
<p>Article URL: <a href="http://emboss.github.com/blog/2012/12/14/breaking-murmur-hash-flooding-dos-reloaded/">http://emboss.github.com/blog/2012/12/14/breaking-murmur-hash-flooding-dos-reloaded/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=4921784">https://news.ycombinator.com/item?id=4921784</a></p>
<p>Points: 6</p>
<p># Comments: 4</p>
]]></description><pubDate>Fri, 14 Dec 2012 16:44:19 +0000</pubDate><link>http://emboss.github.com/blog/2012/12/14/breaking-murmur-hash-flooding-dos-reloaded/</link><dc:creator>emboss</dc:creator><comments>https://news.ycombinator.com/item?id=4921784</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=4921784</guid></item><item><title><![CDATA[New comment by emboss in "Exploit Information Leaks in Random Numbers from Python, Ruby and PHP"]]></title><description><![CDATA[
<p>If OpenSSL::Random isn't working (because OpenSSL is not installed for example) there is also SecureRandom in the stdlib. It tries to do the right thing in any situation: Use OpenSSL:Random if available, otherwise it will fall back to what's available in the OS you're on.</p>
]]></description><pubDate>Sat, 08 Dec 2012 13:24:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=4891551</link><dc:creator>emboss</dc:creator><comments>https://news.ycombinator.com/item?id=4891551</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=4891551</guid></item><item><title><![CDATA[New comment by emboss in "Krypt - the Next Level of Ruby Cryptography"]]></title><description><![CDATA[
<p>You're welcome - and thank you!</p>
]]></description><pubDate>Sat, 08 Dec 2012 13:02:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=4891521</link><dc:creator>emboss</dc:creator><comments>https://news.ycombinator.com/item?id=4891521</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=4891521</guid></item><item><title><![CDATA[Krypt - the Next Level of Ruby Cryptography]]></title><description><![CDATA[
<p>Article URL: <a href="http://emboss.github.com/blog/2012/12/02/krypt-the-next-level-of-ruby-cryptography/">http://emboss.github.com/blog/2012/12/02/krypt-the-next-level-of-ruby-cryptography/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=4862326">https://news.ycombinator.com/item?id=4862326</a></p>
<p>Points: 10</p>
<p># Comments: 2</p>
]]></description><pubDate>Sun, 02 Dec 2012 20:10:59 +0000</pubDate><link>http://emboss.github.com/blog/2012/12/02/krypt-the-next-level-of-ruby-cryptography/</link><dc:creator>emboss</dc:creator><comments>https://news.ycombinator.com/item?id=4862326</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=4862326</guid></item><item><title><![CDATA[Units Digit of a Power: A Constant-Time Algorithm Using a Little Number Theory]]></title><description><![CDATA[
<p>Article URL: <a href="http://emboss.github.com/blog/2012/10/14/computing-the-units-digit-of-a-power-a-constant-time-algorithm-using-a-little-number-theory/">http://emboss.github.com/blog/2012/10/14/computing-the-units-digit-of-a-power-a-constant-time-algorithm-using-a-little-number-theory/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=4652852">https://news.ycombinator.com/item?id=4652852</a></p>
<p>Points: 3</p>
<p># Comments: 0</p>
]]></description><pubDate>Sun, 14 Oct 2012 22:32:41 +0000</pubDate><link>http://emboss.github.com/blog/2012/10/14/computing-the-units-digit-of-a-power-a-constant-time-algorithm-using-a-little-number-theory/</link><dc:creator>emboss</dc:creator><comments>https://news.ycombinator.com/item?id=4652852</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=4652852</guid></item><item><title><![CDATA[New comment by emboss in "SipHash - A solution for hashDoS and short message MACs"]]></title><description><![CDATA[
<p>Implementations:<p>C:    <a href="https://github.com/floodyberry/siphash" rel="nofollow">https://github.com/floodyberry/siphash</a><p>Go:   <a href="https://github.com/dchest/siphash" rel="nofollow">https://github.com/dchest/siphash</a><p>C:    <a href="https://github.com/emboss/siphash-c" rel="nofollow">https://github.com/emboss/siphash-c</a><p>Ruby: <a href="https://github.com/emboss/siphash-ruby" rel="nofollow">https://github.com/emboss/siphash-ruby</a><p>Java: <a href="https://github.com/emboss/siphash-java" rel="nofollow">https://github.com/emboss/siphash-java</a></p>
]]></description><pubDate>Sun, 24 Jun 2012 03:28:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=4152494</link><dc:creator>emboss</dc:creator><comments>https://news.ycombinator.com/item?id=4152494</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=4152494</guid></item><item><title><![CDATA[SipHash - A solution for hashDoS and short message MACs]]></title><description><![CDATA[
<p>Article URL: <a href="http://131002.net/siphash/siphash.pdf">http://131002.net/siphash/siphash.pdf</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=4146531">https://news.ycombinator.com/item?id=4146531</a></p>
<p>Points: 6</p>
<p># Comments: 1</p>
]]></description><pubDate>Fri, 22 Jun 2012 12:46:47 +0000</pubDate><link>http://131002.net/siphash/siphash.pdf</link><dc:creator>emboss</dc:creator><comments>https://news.ycombinator.com/item?id=4146531</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=4146531</guid></item><item><title><![CDATA[New comment by emboss in "Heap overflow bug in OpenSSL"]]></title><description><![CDATA[
<p>Since it was standardized by ITU, it's still used in newer telecom protocols, and it's pervasively used throughout higher level cryptography-related protocols/standards, CAdES is one of the more recent ones and gaining acceptance in the EU. Seems like we have to live with it for a while...</p>
]]></description><pubDate>Thu, 19 Apr 2012 16:06:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=3863652</link><dc:creator>emboss</dc:creator><comments>https://news.ycombinator.com/item?id=3863652</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=3863652</guid></item><item><title><![CDATA[New comment by emboss in "Released: Python 2.6.8, 2.7.3, 3.1.5, and 3.2.3"]]></title><description><![CDATA[
<p>I find their attitude worrying - how can something be overstated if it's essentially possible for anyone to take down servers as easy as that? It's possible, so it must be fixed, that's what basically any text book on security tries to convey: there's no such thing as "mostly secure" - either it's done right or there's no need to do anything at all. Ignorance won't help in making the web a safer (more secure) place.</p>
]]></description><pubDate>Thu, 12 Apr 2012 00:58:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=3830439</link><dc:creator>emboss</dc:creator><comments>https://news.ycombinator.com/item?id=3830439</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=3830439</guid></item><item><title><![CDATA[New comment by emboss in "A primer on Python decorators"]]></title><description><![CDATA[
<p>Minor nitpicking:<p>> unlike in Java, you can also call a class method on an instance<p>It's possible in Java, too. It's just considered bad practice.<p>Still, a very nice read!</p>
]]></description><pubDate>Thu, 12 Apr 2012 00:41:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=3830387</link><dc:creator>emboss</dc:creator><comments>https://news.ycombinator.com/item?id=3830387</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=3830387</guid></item><item><title><![CDATA[New comment by emboss in "Speed Hashing"]]></title><description><![CDATA[
<p>Maybe the question is asked from the wrong perspective - it's not that designers of cryptographic hash functions ask themselves "Hmm, so how fast/slow do we want this thing to be?".<p>They go the other way round and set a "security parameter" that should hold for a particular instance (all the parameters fixed) of their algorithm. That "security parameter" determines how hard it should be for an arbitrary adversary to break the scheme by brute force, and in addition the scheme is only thought to be secure if there is no polynomial time algorithm that can break it in time significantly less than the brute force algorithm would take.<p>Given such a security parameter, the art is then typically to design the fastest primitive that upholds this same security margin. For example, if two (unbroken) algorithms would take O(2^80) for a brute force Birthday Attack, then you'd conceive the faster of the two as the "better" algorithm. ("Fast" of course can be subjective, e.g. fast in HW or fast in SW etc.)<p>For one thing, that's simply just because making an algorithm slower is always possible (PBKDF2), but in practice there are a lot of applications (probably more) where a hash should be as fast as possible rather than as slow as possible, as in digital signatures for example.</p>
]]></description><pubDate>Sat, 07 Apr 2012 12:30:27 +0000</pubDate><link>https://news.ycombinator.com/item?id=3810685</link><dc:creator>emboss</dc:creator><comments>https://news.ycombinator.com/item?id=3810685</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=3810685</guid></item><item><title><![CDATA[New comment by emboss in "Don't use bcrypt"]]></title><description><![CDATA[
<p>While we agree on the fact that using either of the three can't be a bad thing, I'd like to give my opinion on why I favor PBKDF2 over bcrypt, and probably even over scrypt, although I admit the "memory-hardness" of the latter makes it superior in principle. But still, my reasons for going with PBKDF2:<p>It's not just that it's endorsed by RSA, no it's actually the NIST recommendation for password hashing and I find it rather unfair that people on this thread turn that against it!<p>It's the same argument why we generally recommend AES over let's say Twofish or Serpent. We all agreed here that in crypto it's a good thing to be mainstream. And being recommended by NIST makes you Justin Bieber, or not? Standard algorithms may be poor, true, but being a standard has one important advantage: most of the public scrutiny goes into the standard. Much more money and fame there. So it's much more likely that the public will get to know about a flaw in the standard faster than it will get to know about flaws in non-standard algorithms. And that's why I follow standards - even if it's a crappy algorithm, I will know immediately when it's broken and I can react by replacing it right away. The time between an algorithm gets broken and the fact becoming public knowledge is potentially higher the less common an algorithm is. And the time in between being broken and being public knowledge is the most dangerous in my opinion.<p>I'd like to point out that bcrypt is not equal to Blowfish. It piggybacks on Blowfish's key setup. But note that it just piggybacks, on top of that it further extends the original key setup. Blowfish's key setup was probably never invented to do what bcrypt does now, and the last 30min of googling have not brought up any papers about bcrypt cryptanalysis. Compare that to HMAC. Compare that to using PBKDF2 with HMAC SHA-3 when it's out. I'm not saying that Blowfish or any of its parts are bad, but if not PBKDF2 itself, but then most certainly its building blocks have received a lot more analysis than bcrypt or scrypt. With SHA-3 on the horizon the research community knows a lot more about hash algorithms and there is a lot of research going into these topics. That's why I personally feel safer with a construction that maybe in itself has not received more research than the other two alternatives, but where its building blocks almost certainly have, unless somebody proves me wrong. And when that happens, I'll stand happily corrected and will use the next standard.</p>
]]></description><pubDate>Tue, 20 Mar 2012 01:37:27 +0000</pubDate><link>https://news.ycombinator.com/item?id=3727343</link><dc:creator>emboss</dc:creator><comments>https://news.ycombinator.com/item?id=3727343</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=3727343</guid></item></channel></rss>