Hell is overconfident developers writing encryption code

Tone and framing of “hell”

  • Several commenters agree that writing crypto is dangerous for non-experts, but dislike framing “overconfident developers” as “hell”; they see it as demotivating rather than educational.
  • Others defend the frustrated tone as understandable given how often the same mistakes reoccur.

Why developers roll their own

  • Common complaint: experts are condescending, vague, or self-promotional (e.g., dropping a snarky GitHub issue plus a blog link but not explaining details).
  • Identifying real experts vs. “windbags” is perceived as hard and time‑consuming; hiring them is expensive and rarely budgeted.
  • Pressure to “ship yesterday” and security as a box‑ticking exercise pushes teams toward ad‑hoc solutions.

Using crypto correctly is hard

  • Even when using libraries, many devs struggle with low‑level, footgun‑heavy APIs (OpenSSL, Node’s crypto), and the difficulty of composing primitives into secure protocols.
  • Multiple people note you can misuse even high‑level libs like libsodium (bad keys, nonces, protocol design).
  • Core theme: most real vulnerabilities come from “joinery” and protocol design, not from the primitive itself.

Examples of bad crypto

  • Stories of partners reversing RSA public/private roles, limiting input to 8 bytes, or inventing bespoke XML “encryption” with hard‑coded, published RSA keys, often accepted because it “looks complex.”
  • Discussion of padding‑oracle risks and unauthenticated CBC; concern that maintainers sometimes dismiss warnings when they don’t see an immediate exploit path.

What “don’t roll your own crypto” means

  • One camp: it now effectively means “don’t do anything security‑related without experts,” which feels paralyzing.
  • Counterpoint: the original intent is narrower—don’t design your own schemes or compose primitives (AES, RSA, DH, etc.) into new protocols without expertise; using audited high‑level constructs (“boxes”, AEAD, KMS, Vault) is fine.
  • Debate about whether writing auth systems or password storage counts; consensus: primitives like salted SHA are out, password KDFs (bcrypt, scrypt, Argon2, PBKDF2) are table stakes, but full auth flows still have many pitfalls.

Tools, documentation, and responsibility

  • Strong calls to prefer opinionated, misuse‑resistant libraries (libsodium, Tink, age, sops, managed KMS/Vault) and to get external review for anything novel.
  • Several argue cryptographers have underdelivered on “easy‑to‑use, hard‑to‑misuse” tooling and accessible, centralized best‑practice documentation, contributing to developer mistakes.
  • Others counter that crypto’s inherent complexity and incomplete threat models can’t be solved by simple checklists; the realistic path is better tooling plus occasional expert consultation.