What are the exceptions to Kerckhoffs's principle? Kerckhoffs's principle:  A cryptosystem should be secure even if everything about the system, except the key, is public knowledge.


Yet the following are three exceptions:-


NSA Suite A cryptographic algorithms.  There is an answer here that implies that the Suite B algorithms are broken therefore can be published so that the NSA can listen in on Suite B users. And by not publishing Suite A, no one knows for sure instead relying on security through obscurity.
Banks holding my money.  They haven't published a security architecture diagram of their network, and probably wouldn't tell me over the phone how they've implemented AES.  Perhaps they use ECB mode or even their own Barclay's mode. Banks are civilian organisations, not military like example 1.  They're regulated yes, but (even redacted)  security reports are not published.
Windows' Cryptography API.  This is used by some people and they unknowingly might be using the dodgy  Dual_EC_DRBG, or something even more decrepit.  There is no code audit available to prove any particular mode of operation or algorithm. This particular API could easily be published to assuage users fears without revealing the rest of Windows' internals.


It seems to me that whilst Kerckhoff sounds plausible, many organisations ignore it.  And get away with it.  What are the real world exceptions or rules? Does it for example only apply to amateur cryptography?
Kerckhoffs's principle: A cryptosystem should be secure even if everything about the system, except the key, is public knowledge.


The principle does not state that it is unconditionally unacceptable to keep your algorithm or system a secret. (This answer provides an image of the original text Kerckhoffs used.)

Just keeping the used algorithm a secret is not itself a violation of the principle - as long as it would be secure even if the algorithm was known. AES would be secure even if it is known that you used it, keeping the fact that you used AES a secret does not hurt anything. In fact, it is possible that it could provide an additional layer of security, and can be used to provide "defense in depth".

NSA suite A/suite B is a good example of this: It is not an exception to Kerckhoffs princpiple, because the system would (most likely) be secure even if you knew what algorithms they were using. It simply adds a theoretical additional layer of difficulty if you don't know what they are using.

As for banks, I am not necessarily qualified to speak about their systems, as I do not know them; However, it is plausible that some of them were created quite a while ago, and consequently may not necessarily utilize all the best practices that we would build a new system with today. "It's in production already" can be hard to argue with.

As for Microsoft, well, you say they "get away with it" - many if not most people are not exactly thrilled about their decisions to keep everything a secret; However, they do that for way more then just the crypto API, and such decisions are probably made from a business perspective, rather then a crypto one. 

edit: Apparently, if you are really so inclined and willing to sign stuff, you can view some of Microsofts source code. While that's not exactly "open", it implies that you could find out what they were doing if you really wanted to.

However...

Sometimes violation of the principle is simply an attempt to compensate for the inadequacy of the algorithm/system by keeping it a secret from the adversary - this is the situation where the principle will end up making a difference. 

This has proven itself to be a poor strategy - instead of allowing the problems to become known so that they can be fixed, they chose to cover them up and hope that nobody finds them. When "hope" appears as an factor in your crypto-system, that's a sure sign of a problem.