<div dir="ltr">> So introductory-level programming course mistakes are right out.<br>
<br><div>
In my experience it's quite often a really simple mistake that gets you,</div><div>even when you're an experienced programmer. I'm quite afraid of simple off-by-one bug,</div><div>places which I didn't fix in copy&paste, basic logic mistakes etc.</div>
<div>IMO Nadim's main mistake wasn't the actual bug, mistakes like that can happen to anybody,</div><div>but it was designing a really weird API that invites mistakes. Nobody sane return decimal digits</div><div>from a cryptographic PRNG.</div>
<div><br></div><div>For example a really basic cryptography mistake is reusing a nonce in AES-CTR. Still it happens to people experienced</div><div>in both coding and cryptography. For example Tarsnap had since vulnerability for several versions, despite a competent developer.</div>
<div><a href="http://www.daemonology.net/blog/2011-01-18-tarsnap-critical-security-bug.html">http://www.daemonology.net/blog/2011-01-18-tarsnap-critical-security-bug.html</a></div><div><br></div><div>In my own programs I'm really careful about nonces and randomness, but still I wouldn't be surprised if a trivial bug slipped through in that area.</div>
<div>Writing tests which detect such mistakes is really hard.</div></div>