For example, the interfaces to programs like PGP assume that their passphrase input always comes from the user over a secure path like the local console. What the system designer assumes is trusted may not match the needs or expectations of the real users, especially when software can be controlled remotely over insecure networks. Poorly understood protocol and service interactions. As systems get bigger and more complex, benign features frequently come back to haunt us, and it's hard to know even where to look when things fail. Unrealistic threat and risks assessment.
Security experts tend to focus on the threats they know how to model and prevent.
Unfortunately, attackers focus on what they know how to exploit, and the two are rarely exactly the same. Interfaces that make security expensive and special. If security features are to be used they must be convenient and transparent enough that people actually turn them on. It's easy to design encryption mechanisms that come only at the expense of performance or ease of use, and even easier to design mechanisms that invite mistakes. No broad-based demand for security.