Skip to content
HomeVideosBooksBlogs
AllTop postsTopics
Podcasts
HistoryListsWatch laterLiked videosFollowing

The videos, books, blogs and podcasts Hacker News keeps recommending, all in one place.

VideosBooksBlogsPodcastsAboutPrivacySettings

Data from Hacker News, HackerTube, HackerBooks, HackerBlogs and Open Library. Credits · Not affiliated with Y Combinator.

HomeVideosBooksBlogsPodcasts
Ctrl K
    C

    Coda Hale

    codahale.com · Personal blog · on HN since 2009

    Coda Hale is a software engineer who writes on password storage, cryptographic timing attacks, distributed systems theory, and how organizations work.

    Visit blogHN submissions
    SecurityManagementDistributed Systems
    What HN says

    HN cites his password storage post as the standard reference for bcrypt and scrypt, and his "Work is work" essay as the best on organizations.

    Stats for nerds
    218HN people shared it
    75linked in comments
    2.6Kstory points
    Jul 2024last shared
    2010people per year2024

    Top posts on HN

    1. 1
      How To Safely Store A Password
      105 people · 906 points · first shared 2010 · 210 comments on HN
    2. 2
      You Can't Sacrifice Partition Tolerance
      28 people · 383 points · first shared 2010 · 59 comments on HN
    3. 3
      Work is work, in which returns diminish (2020)
      14 people · 251 points · first shared 2020 · 105 comments on HN
    4. 4
      A Lesson In Timing Attacks (or, Don't use MessageDigest.isEquals)
      25 people · 230 points · first shared 2009 · 30 comments on HN
    5. 5
      The Rest of the Story (Yammer & Scala)
      8 people · 199 points · first shared 2011 · 60 comments on HN
    6. 6
      Work Is Work
      13 people · 178 points · first shared 2020 · 44 comments on HN
    7. 7
      Fan-In
      3 people · 146 points · first shared 2016 · 27 comments on HN
    8. 8
      Little’s Law, the Universal Scalability Law, and the Usl4j Java library
      2 people · 109 points · first shared 2017 · 4 comments on HN
    9. 9
      Towards a Safer Footgun
      3 people · 66 points · first shared 2017 · 10 comments on HN
    10. 10
      A Small, Nice Thing
      2 people · 50 points · first shared 2016 · 30 comments on HN

    What HN people wrote when they linked it

    • yencabulatorJul 2024

      It's a huge field, basically distributed computing, burdened here with the glorious purpose of durable data storage. Any introductory text long enough becomes essentially a university-level computer science course.

      RADOS is the underlying storage protocol used by Ceph (https://ceph.com/). Ceph is a distributed POSIX-compliant (very few exceptions) filesystem project that along the way implemented simpler things such as block devices for virtual machines and S3-compatible object storage. Clients send read/write/arbitrary-operation commands to OSDs (the storage servers), which deal internally with consistency, replication, recovery from data loss, and so on. Replication is usually leader and two followers. A write is only acknowledged after the OSD can guarantee that all later reads -- including ones sent to replicas -- will see the write. You can implement a filesystem or network block device on top of that, run a database on it, and not suffer data loss. But every write needs to be communicated to replicas, replica crashes need to be resolved quickly to be able to continue accepting writes (to maintain the strong consistency requirement), and so on.

      On the other end of the spectrum, we have Cassandra. Cassandra is roughly a key-value store where the value consists of named cells, think SQL table columns. Concurrent writes to the same cell are resolved by Last Write Wins (LWW) (by timestamp, ties resolved by comparing values). Writes going to different servers act as…

    • FirehedMar 2012

      He's correct in that if you've selected bcrypt for key derivation, there's a good chance you could be doing things better (for one, its output is only 184 bits long; insufficient for AES256) where PBKDF2 works in a way where you can customize the output length.

      However, the point of the bcrypt argument is not that bcrypt is the best algorithm for certain things, but that it's (at a minimum) about four orders of magnitude better than most people's "secure" password storage algorithm: sha1(password). Because it requires both a salt and a work factor, even a dictionary attack is wildly impractical unless there's a massive flaw discovered in the algorithm.

      If developers are going to be trained to pick a specific algorithm for password storage, I'd much prefer bcrypt (no known flaws, many benefits) over sha1 or md5 (designed to be fast for checksumming, salt not required). Might PBKDF2 be a better choice still? Very possibly; I haven't done enough research to intelligently answer - and since this is crypto, I will not best-guess it.

      My real point here? The article attacks bcrypt as a key derivation algorithm, but I've never seen someone suggest it to be used in such an application. Even the post that started what you may call the bcrypt movement (http://codahale.com/how-to-safely-store-a-password/) is linked in the article, and it's titled "How to safely store a password". It is NOT titled "How to safely derive encryption keys".

      So yeah, I'm calling linkbait.

    • skrebbelJul 2019

      I'm a developer, not a cryptographer, and like most crypto articles, most of this post is gibberish to me. I really tried to follow it in the beginning, but then I gave up, scrolled to the "what should you use instead", and then realized I didn't understand that either.

      If this is article is "easy" crypto, and I shouldn't roll my own crypto, then what should I do? "Just use elliptic curve crypto but make sure you choose the right curve! Here's an abbreviation for you, libsodium has it so you're all set" doesn't comfort me much. I don't have a good intuition of what a curve even is and why my sensitive data can't just go straight ahead like all the other data. I mean, when I call into libsodium with parameters I do not understand, then aren't I, for all intents and purposes, rolling my own crypto anyway? How is any of this of help?

      If I want to allow my customers to send me encrypted data via an untrusted channel, then what do I do? I need public key crypto for that, right? Basically, I want the public key cryptography version of Coda Hale's classic blog post about password hashing [0], does that exist?

      EDIT: thanks for all the comments folks, great insights! I particularly found [1] by CiPHPerCoder to be a great starting point (akin to Coda's password article) for all kinds of scenarios. I feel much more confident about this stuff now than I did 2 hours ago.

      [0] https://codahale.com/how-to-safely-store-a-password/

      [1]…

    • eroppleSep 2014

      Integrated libraries cause one of .NET's biggest problems, though: the "if it doesn't come from Microsoft, it doesn't matter" effect. The Java ecosystem's openness provides you a lot of choice and has created a lot of innovation; Coda Hale had a good article on the topic[1]. I don't feel like there's a ton of non-Microsoft innovation in the .NET community--there's some iteration and a lot of (often poor--hello, NuGet) porting and adaptation, but there aren't many people doing something like Scalaz Streams on .NET.

      Even setting aside advancement and research, it's hard to really create a real competitors to Microsoft's existing solutions even when they're terrible. NHibernate is the "best" one I can think of and it's kind of trainwreckish. Outside of that--like, NancyFx has been around a long time at this point but hasn't really made a dent, whereas the JVM application server is rapidly losing ground--and it literally cannot come soon enough for my liking--to frameworks like Dropwizard or Play. You can fight the Man on the JVM and win; I'm not sure you can do so on .NET.

      That isn't to say .NET doesn't have some significant pluses. If you stay in the sandbox and can stomach having to deal with non-Unix command line tools or Cygwin (haaaa ha ha ha), it is really really nice. But the second you go off-roading, bring a helmet.

      [1] - http://codahale.com/when-formality-works/

    • bri3dJun 2014

      I think, if you take the view espoused in http://codahale.com/you-cant-sacrifice-partition-tolerance/ , that P can be explained as the "the system is predictable across a partition."

      Geography and whether it's a "failover solution" doesn't change that the system is distributed - anything with more than one node is fundamentally distributed, and I'd argue that even two processes communicating on one instance can be considered as a distributed system as well.

      The system can choose which kind of predictable it wants to be: whether it sacrifices consistency in favor of being available (accepting reads and writes without knowing that reads are fresh or writes linearizable) or availability in favor of consistency (rejecting reads and writes that can't be confirmed).

      In the case of "master<=>master replication" as it's configured in most relational databases, I think the system tries to be AP: conflicted writes or stale reads are possible because barring special options like 2-phase commit, the replicas generally lag each other (as anyone who's tried to reconcile a MySQL split-brain situation knows, this can be a tremendous pain).

    • rowborgMay 2024

      Coda Hale's "work is work" is my favorite analysis of this topic, because of its focus on axiomatic mathematical upper bounds on productivity and how you can avoid hitting them:

      https://codahale.com//work-is-work/

      The solution, as mentioned by other comments already, is for leaders to ruthlessly focus on keeping work efforts as independent as possible:

      > When presented with a set of problems which grow superlinearly intractable as N increases, our best bet is to keep N small. If the organization’s intent is to increase value delivery by hiring more people, work efforts must be as independent as possible. Leaders should develop practices and processes to ensure that the work efforts which their strategies consider parallel are actually parallel. Shared resources should be continuously managed for contention, and where possible, the resources a group needs should be colocated with that group (e.g., if the work involves a lot of design, staff a designer to that group). Combined arms doctrine isn’t just for soldiers.

    Related

    Trail of Bits Blogblog.trailofbits.com278 people

    RSA is a fragile cryptosystem

    Trail of Bits Blog
    Company · last shared 2026
    Matthew Greenblog.cryptographyengineering.com418 people

    Why I’m done with Chrome

    Matthew Green
    Personal · last shared 2026
    Daniel J. Bernsteinblog.cr.yp.to144 people

    NSA, NIST, and post-quantum crypto: my second lawsuit against the US government

    Daniel J. Bernstein
    Personal · last shared 2026
    Envoy Proxy Blogblog.envoyproxy.io25 people

    Modern network load balancing and proxying

    Envoy Proxy Blog
    Company · last shared 2025
    Root Labs Rdistrdist.root.org72 people

    Stuxnet was embarrassing, not amazing (2011)

    Root Labs Rdist
    Publication · last shared 2026
    Sacha Chuasachachua.com95 people

    EmacsConf 2024 Notes

    Sacha Chua
    Personal · last shared 2026
    Rachel Krollrachelbythebay.com493 people

    fork() can fail

    Rachel Kroll
    Personal · last shared 2026
    Kudelski Security Researchresearch.kudelskisecurity.com52 people

    How we exploited CodeRabbit: From simple PR to RCE and write access on 1M repos

    Kudelski Security Research
    Company · last shared 2025