T

Ted Unangst

tedunangst.com · Personal blog · on HN since 2013

Ted Unangst, an OpenBSD developer, writes about C, security, cryptography, and operating system internals.

What HN saysCommenters call his blog great and point to his posts on moving to HTTPS and the reop signing tool as a possible GPG replacement.
269HN people shared it
150linked it in comments
410stories submitted
11Kstory points
3 months agolast shared
2013people per year2026

Most-shared posts

  1. 1
  2. 2
    Analysis of openssl freelist reuse
    12 people · 9 points · first shared 2014 · discussion on HN
  3. 3
    Heartbleed in Rust
    10 people · 245 points · first shared 2015 · 134 comments on HN
  4. 4
    Doas – dedicated OpenBSD application subexecutor
    9 people · 7 points · first shared 2020 · 2 comments on HN
  5. 5
    Moving to https
    9 people · 7 points · first shared 2017 · 1 comments on HN
  6. 6
    On the Usability of Editable Software
    8 people · 43 points · first shared 2020 · 3 comments on HN
  7. 7
    String interfaces
    7 people · 14 points · first shared 2015 · discussion on HN
  8. 8
    Technical debt and tacking into the wind
    6 people · 124 points · first shared 2015 · 34 comments on HN
  9. 9
    Reop – reasonable expectation of privacy
    6 people · 23 points · first shared 2014 · 2 comments on HN
  10. 10
    Now or never exec
    6 people · 21 points · first shared 2015 · discussion on HN
  11. 11
    Honk Preview
    6 people · 10 points · first shared 2019 · discussion on HN
  12. 12
    Homepage
    6 people · first shared 2020
  13. 13
    Accidentally nonblocking
    5 people · 168 points · first shared 2016 · 36 comments on HN
  14. 14
    Sct – set color temperature
    5 people · 150 points · first shared 2015 · 53 comments on HN
  15. 15
    Features are faults redux
    5 people · 78 points · first shared 2017 · 11 comments on HN

What HN people wrote when they linked it

juped · 2020-09-22
Ward Cunningham should go back to the original CGI wiki, but add the JavaScript from https://flak.tedunangst.com/ so that SPA-lovers can smile in satisfaction at a webpage with a goddamn loading screen.
mikae1 · 2025-01-14
I actually love the official web client. So much that I never open Tusky (or Elk). Have you tried https://brutaldon.org? Or perhaps you're the type of person that'd be willing to self host https://codeberg.org/grunfink/snac2 or https://humungus.tedunangst.com/r/honk?
dustyharddrive · 2023-01-21
Following an account discovered via WebFinger on your domain doesn’t provide account portability (https://www.jwz.org/blog/2022/11/using-your-own-domain-as-a-mastodon-h… You can always host a lightweight ActivityPub server like honk (https://humungus.tedunangst.com/r/honk).
zimpenfish · 2022-12-25
Honk - https://humungus.tedunangst.com/r/honk Minimalist and opinionated but is a single binary with an SQLite db. Source is, uh, esoteric but is definitely hackable (there's a whole bunch of forks.) Seems to work ok with a few minor weirdnesses[1]. Should clarify that it doesn't have an API - you can't use Mastodon clients against it (until/unless someone writes on) - it's basically web only. [1] I can't follow someone on my GotoSocial instance from honk but I'm pretty sure I've debugged that as being GTS's fault[2] rather than honk. [2] They made many odd design decisions which cause(d) issues with federating to other systems. [edit: clarify that honk as no API]
danielheath · 2022-11-06
No, although the author also maintains his own SCM host ( https://humungus.tedunangst.com/ ) where you can clone the repo.
somat · 2022-11-05
For personal use, I would recommend Ted Unangst's honk. https://humungus.tedunangst.com/r/honk But that is mainly because I value straightforward installation and simple administration. So that converges well with honk. If you(or your users) value features more you will probably want to use something else. but you will suffer when it comes time to administer the thing.
Toaster-King · 2022-07-15
There's a great blog post[1] by one of the OpenBSD developers about why they did so. tl;dr using bitmasks necessitates namespaced enums/defines that take up horizontal space, strings are easier and don't need to go through the C pre-processor. [1] https://flak.tedunangst.com/post/string-interfaces
kryptiskt · 2022-06-23
If you follow the link at the bottom you get to a more analytical blog post: https://flak.tedunangst.com/post/thoughts-on-style-the-TLS-and-errors And the context here is that OpenBSD people were really mad about OpenSSL in the aftermath of Heartbleed. It was around this time they forked it into LibreSSL.
Beltalowda · 2022-06-05
I enjoy Ted Unangst's writings because they're both informative as well as written in a kind of fluent non-forced "fun" style that I enjoy: https://flak.tedunangst.com/
Pr0ject217 · 2022-02-07
EDIT: Paste this hacky snippet into your browser's console to save all of the links into your clipboard: (() => { let result = [...document.querySelectorAll('td a')] .map((link) => link && !link.href.includes('ycombinator') && !link.href.includes('javascript:void') ? link.href : '' ) .filter(Boolean); result = [...new Set(result)]; result.sort(); copy(result.join('\n\n')); })(); Just to help, here's a compiled-list of all of the links shared here so…
yakubin · 2021-04-09
The suggestion at the end is a more drastic version of what is done at <https://flak.tedunangst.com/>. I prefer the latter for the added artistic aspect. :)
brobdingnagians · 2020-08-26
Tedu had an interesting blog post about testing recently: https://flak.tedunangst.com/post/against-testing What I got out of it was that tests for regressions are really good, but there are lots of considerations to make when determining which other tests to write, and why you are doing it. A good read nevertheless.
vermaden · 2018-08-11
Not only for Linux. Works great on FreeBSD as well. https://vermaden.wordpress.com/2018/06/28/freebsd-desktop-part-11-key-… ... and if Redshift seems too 'bloated' with too much dependencies there is OpenBSD style SCT - Set Color Temperature: https://www.tedunangst.com/flak/post/sct-set-color-temperature
throw5427 · 2017-10-16
Trust keys on first use. Like SSH. https://www.tedunangst.com/flak/post/moving-to-https "So how does one verify that the downloaded cert is the original? The same way the CAs do. Perform a DNS lookup, make a web request, trust the result. The addition of HPKP would indicate that people find the CA model untrustworthy, solving the problem with trust on first use key continuity. Why not cut out the middle man? Protesting the CAs is admittedly pretty futile, but if I can’t do it, who can?"
dmit · 2017-03-12
Ted Unangst does a great job aggregating links to tech content over at http://www.tedunangst.com/inks/. His own blog is great as well. Also, previously: https://news.ycombinator.com/item?id=11563516.
zokier · 2016-03-17
Reop is not really the answer, but I think it (and NaCl with it) is the best starting point for building a GPG replacement. Of course it does not fit if you need compatibility with actual GPG for some reason. http://www.tedunangst.com/flak/post/reop
lmm · 2016-02-11
C doesn't have tagged unions, which makes it a terrible language to write pretty much anything in. Most of the other pieces you need for good programming you can write yourself in C, but you can't make a safe tagged union out of thin air, and if you rely on helper functions or macros then your tools won't understand them. It's also so bad at expressing literal values that I've seen a serious recommendation to write literal strings and parse them instead ( http://www.tedunangst.com/flak/post/string-interfaces ). The type system doesn't even do generics, never mind higher kinds. Maybe you could keep a web framework small enough that that wouldn't be too big a deal.
ams6110 · 2016-01-14
The Qualsys analysis states that keys provided by an agent are not disclosed, and that encrypted keys are disclosed in their encrypted form. https://www.qualys.com/2016/01/14/cve-2016-0777-cve-2016-0778/openssh-… Quoting from above: Finally, for these three reasons, passphrase-encrypted SSH keys are leaked in their encrypted form, but an attacker may attempt to crack the passphrase offline. On the other hand, SSH keys that are available only through an authentication agent are never leaked, in any form. So if you use an agent, and follow the good advice to encrypt your private keys you should be safe(er). See for older client versions: http://martin.kleppmann.com/2013/05/24/improving-security-of-ssh-priva… or better for newer clients: http://www.tedunangst.com/flak/post/new-openssh-key-format-and-bcrypt-…
rhelmer · 2015-10-05
I am hoping that Rust will make in-roads into the BSD world, since it interoperates well with C and is much safer by default while not imposing overhead like a managed language+runtime would. It also has very liberal licensing (GCC being GPL has always been a tough pill for some to swallow, FreeBSD at least has already switched to Clang) https://github.com/rust-lang/rust#license The OpenBSD folks have done great work through auditing and writing safer code in C, and I agree that using a language that ameliorated at least some of the common mistakes programmers make would be a net positive. Related - this blog from @tedunangst is worth reading, regarding the limit to which even a language like Rust can protect against specific exploits (the OpenSSL "Heartbleed" vulnerability, in this case) http://www.tedunangst.com/flak/post/heartbleed-in-rust
glass- · 2015-10-01
This blog post about Wasabi is worth a read (another perspective from someone who worked there): http://www.tedunangst.com/flak/post/technical-debt-and-tacking-into-th…
smhenderson · 2015-04-01
It is, I read flak as often as Ted publishes something new and I never saw that. Couple that with the fact that Ted loves to rant[1][2] about bad UI design, especially on the web, and it becomes obvious that his latest "feature" will be gone tomorrow. 1 http://www.tedunangst.com/flak/post/the-wiki-box-is-out-of-control 2 http://www.tedunangst.com/flak/post/no-im-not-running-git
2bluesc · 2014-06-01
The accepted answer is somewhat behind the times. Now the best way to secure a private ssh key is using the the new format utilizing bcrypt's kdf[1] added to OpenSSH 6.5[2]. The new format makes it significantly harder (read: slower) to crack private keys, something much needed. I've been using the new key format with ecdsa and ed25519. It's worth nothing that and some things like GNOME Keyring's ssh-agent don't support the format just yet, so things like ssh-add to the agent appear to fail and I haven't looked any deeper yet. [1] http://www.tedunangst.com/flak/post/new-openssh-key-format-and-bcrypt-… [2] http://www.openssh.com/txt/release-6.5
no_l0gic · 2014-04-12
This has nothing to do with the language and everything to do with the programmers and practices - some great write-ups: http://www.tedunangst.com/flak/post/analysis-of-openssl-freelist-reuse Who can resist Theo: http://article.gmane.org/gmane.os.openbsd.misc/211963
AReallyGoodName · 2014-04-12
Excuse the formatting above, it seems to have eaten my whitespace. Just for further reference i recommend reading about OpenSSLs freelists implementation. Essentially if you have an object that uses a specific amount of space it will be stored in a specific location. Which is why private key extraction is possible. You just need to craft a request that puts your_actual_payload in a location so that the 65536 bytes that are read from it into a buffer also end up reading the key. http://www.tedunangst.com/flak/post/analysis-of-openssl-freelist-reuse
colin_mccabe · 2014-04-10
I think you are greatly exaggerating how hard it is to find invalid memory use in openssl. According to Ted Unangst, all you have to do is turn off the custom allocator in openssl to immediately hit a use-after-free bug. He writes: "This bug would have been utterly trivial to detect when introduced had the OpenSSL developers bothered testing with a normal malloc (not even a security focused malloc, just one that frees memory every now and again). Instead, it lay dormant for years until I went looking for a way to disable their Heartbleed accelerating custom allocator." http://www.tedunangst.com/flak/post/analysis-of-openssl-freelist-reuse
rollcat · 2025-09-19
Doesn't help that all of the major decentralized protocols have been very effectively undermined and pushed aside. GTalk first de-federated (weakening XMPP as a whole), then killed XMPP support completely. Reader effectively killed RSS for casual users. Email has been swallowed whole by the oligopoly of GMail+Yahoo+Outlook+iCloud+etc; spam is a real problem, so if you're self-hosting your email, you kinda expect to be blocked by default by the large networks. Existing, corporate-backed efforts are "open-washing" their services. Signal is supposed to be using an open protocol, but IIRC won't even let you join their network if you use an alt client. Following Twitter's demise, Bluesky popped up, and promised federation. I didn't check in a while - did it happen yet? Actually open networks? Mastodon took off like crazy, but everyone tried to register on the "main", biggest instance - we got bamboozled so hard, we can't even comprehend what "decentralized" is actually supposed to mean. ActivityPub as a protocol? Ted Unangst decided to build his own client from the spec, and was constantly running into Mastodonisms. <https://flak.tedunangst.com/search?q=activitypub> Matrix? It has effectively one client (Element) that isn't a security disaster. <https://soatok.blog/2024/08/14/security-issues-in-matrixs-olm-library/… Anything left, worth of anyone's attention?
zppln · 2022-02-07
OpenBSD developer Ted Unangst: https://flak.tedunangst.com/
enriquto · 2020-02-08
I follow regularly these people, these are mostly slow-going blogs or websites: 1. Fabrice Bellard: https://bellard.org/ This is not really a blog, but a traditional website with links to the work of its author (who is probably one of the top programmers ever). It updates rarely, but when it does, it is to expose yet another monumental piece of computing work that will blow your universe. 2. Linus Akesson: https://www.linusakesson.net/ He's always onto some funny crazy things: obfuscated programming, underhanded programming, c64 emulation, chiptunes... 3. Uriel l'Étranger: http://cat-v.org/ The only self-described "philosopher of software" that I have ever seen. His website is of course not updated anymore, but you can re-read it many times and always learn something new. 4. Ted Unangst: https://flak.tedunangst.com/ Nice to follow some cool news about openbsd development 5. Andy Chu: http://www.oilshell.org/blog/ Who has embarked in an amazing quest to turn the unix shell into a cleaner tool 6. Jens Gustedt: https://gustedt.wordpress.com/ If you really want to be up to date about the evolution of the C language
xoa · 2018-11-02
Sure, but OpenBSD has a very specific project goal and use cases (which is absolutely as it should be!) and their stance thus makes sense in context. But it doesn't mean their stance is universally applicable either, anymore then best practices for IaaS all apply everywhere. For an alternate feature example: some OpenBSD committers for years have reasonably rejected OpenZFS [1] requests because it was considered to be just plain too big, and in turn presented more threat surface and higher system resource consumption (big issue for embedded/firewall appliance applications) then was desirable for them. All of which is true and makes total sense there. But not for a lot of big servers and end user systems where I think automatic full data consistency/checks/regeneration, easy full replication, trivial cheap atomic snapshots, portability between many OS, and so on, address much more important threats then the extra load or any unknown potential vulns. No need for a monoculture ecosystem here rather then using the right specific tool for the job right? ----- 1: https://www.tedunangst.com/flak/post/ZFS-on-OpenBSD
milcron · 2017-04-11
OpenBSD does seem empty by comparison, but it's on purpose. ZFS is large and complicated. http://www.tedunangst.com/flak/post/ZFS-on-OpenBSD DTrace would be nice to have, but I believe there are CDDL license concerns. Jails are a way of isolating services so that they cannot do (much) damage to the system in the event they are compromised. The closest alternative in OpenBSD is probably pledge(2), which allows a program to voluntarily renounce the ability to invoke a set of syscalls. There is also chroot if all you need is filesystem virtualization. MAC can be complicated to implement. This comment explained things very well: https://news.ycombinator.com/item?id=8893749 > OpenBSD doesn't support a MAC framework because they believe the best approach to security is correctness, rather than trying to achieve security by adding features which results in more complexity, making it more difficult to ensure correctness. A common mistake people make is thinking that OpenBSD's primary goal is security; their primary goal is correctness. This just happens to result in better security more often than not. Linux compat is a similar story. OpenBSD dropped it in the 6.0 release due to complexity and security concerns. I don't know a whole lot about CloudABI.

Keyboard shortcuts

/Search
j kNext / previous blog
EnterOpen selected blog
vVisit the blog site
fFollow / unfollow
lSwitch grid / list view
dSwitch dark mode
g hHome
g pTop posts
g tTopics
g fFollowing
g lLiked
g yHistory
g qFAQ
EscBack / close