Cryptography engineering has an intrinsic duty of care.
http://soatok.blog/2026/02/25/cryptography-engineering-has-an-intrinsic-duty-of-care/
Cryptography engineering has an intrinsic duty of care.
http://soatok.blog/2026/02/25/cryptography-engineering-has-an-intrinsic-duty-of-care/
@soatok I'm curious your thoughts on usability in the space. You've shared some of them, but I tripped over something this week and I thought you might be interested.
I tried adding scope to an API token I had Atlassian generate for me, and the scoped token wouldn't work. I bashed my head against the problem for awhile: peeled apart the library I was using to find the actual URLs it was hitting, confirmed the scopes I'd assigned should match that URL, confirmed an unscoped token worked... It finally turned out that the issue was if you're using a scoped token, you have to hit an entirely different hostname and top-level path in the URL; they have a slightly different API for the requests with scoped tokens.
At that point I gave up and used an unscoped one because nobody in IT was forcing me to use scoped, I just liked the idea that my token intended to read JIRA tickets couldn't also delete them, but I don't care enough to rewrite my API library.
How do we balance security and usability? Is there even a rule of thumb?
(Also, if you ever hear what the first twelve characters in an Atlassian API token mean, I'd love to find out. I had to generate five tokens while testing this problem, and they all started with the same twelve characters... My guess is it's a customer-identifier specific to my company, but I haven't had time to pin down a coworker long enough to have them generate a token to compare with).
@mark Actually, Avi Douglen said this better than I could:
Ross Anderson wrote a lot about security usability and used to teach about good API design. His classes included the OpenSSL tri-state return as an example of what not to do (it was very easy for the caller to write a check that put success and unusual failure in the same class).
I wish people writing crypto APIs would study libsodium, it really is the gold standard for these things.
I recently had some discussions with the maintainers of the Linux Foundation’s PQC libraries because they have an API that takes a size for the output parameter on one call, but that call has a fixed-sized output. If you specify the wrong size, it doesn’t check it, it just writes past the end of your buffer. And you have to pass a constant there. Unfortunately, this API came from the reference implementation and it’s now hard to change.
GNU social JP is a social network, courtesy of GNU social JP管理人. It runs on GNU social, version 2.0.2-dev, available under the GNU Affero General Public License.
All GNU social JP content and data are available under the Creative Commons Attribution 3.0 license.