Pursuant to the comment I made on the question:
One important point has been very glossed over by nearly everyone... My initial reaction was very similar to @Michael Brooks, till I realized, like @stefanw, that the issue here is broken requirements, but these are what they are.
But then, it occured to me that that might not even be the case! The missing point here, is the unspoken value of the application's assets. Simply speaking, for a low value system, a fully secure authentication mechanism, with all the process involved, would be overkill, and the wrong security choice.
Obviously, for a bank, the "best practices" are a must, and there is no way to ethically violate CWE-257. But it's easy to think of low value systems where it's just not worth it (but a simple password is still required).
It's important to remember, true security expertise is in finding appropriate tradeoffs, NOT in dogmatically spouting the "Best Practices" that anyone can read online.
As such, I suggest another solution:
Depending on the value of the system, and ONLY IF the system is appropriately low-value with no "expensive" asset (the identity itself, included), AND there are valid business requirements that make proper process impossible (or sufficiently difficult/expensive), AND the client is made aware of all the caveats...
Then it could be appropriate to simply allow reversible encryption, with no special hoops to jump through.
I am stopping just short of saying not to bother with encryption at all, because it is very simple/cheap to implement (even considering passible key management), and it DOES provide SOME protection (more than the cost of implementing it). Also, its worth looking at how to provide the user with the original password, whether via email, displaying on the screen, etc.
Since the assumption here is that the value of the stolen password (even in aggregate) is quite low, any of these solutions can be valid.
Devam canlı bir tartışma, farklı mesajların ve ayrı yorum ipliği aslında BİRKAÇ canlı tartışmalar, olduğundan, ben bazı açıklamalar eklemek ve başka bir yerde burada gündeme gelmiş, çok iyi bazı noktaları cevap verecektir.
To start, I think it's clear to everyone here that allowing the user's original password to be retrieved, is Bad Practice, and generally Not A Good Idea. That is not at all under dispute...
Further, I will emphasize that in many, nay MOST, situations - it's really wrong, even foul, nasty, AND ugly.
Ancak, sorunun dönüm noktası etrafında the principle, IS there any situation where it might not be necessary Bu korusun, ve eğer öyleyse, most correct manner appropriate to the situation bunu nasıl.
Now, as @Thomas, @sfussenegger and few others mentioned, the only proper way to answer that question, is to do a thorough risk analysis of any given (or hypothetical) situation, to understand what's at stake, how much it's worth to protect, and what other mitigations are in play to afford that protection.
No, it is NOT a buzzword, this is one of the basic, most important tools for a real-live security professional. Best practices are good up to a point (usually as guidelines for the inexperienced and the hacks), after that point thoughtful risk analysis takes over.
Y'know, it's funny - I always considered myself one of the security fanatics, and somehow I'm on the opposite side of those so-called "Security Experts"... Well, truth is - because I'm a fanatic, and an actual real-life security expert - I do not believe in spouting "Best Practice" dogma (or CWEs) WITHOUT that all-important risk analysis.
"Beware the security zealot who is quick to apply everything in their tool belt without knowing what the actual issue is they are defending against. More security doesn’t necessarily equate to good security."
Risk analysis, and true security fanatics, would point to a smarter, value/risk -based tradeoff, based on risk, potential loss, possible threats, complementary mitigations, etc. Any "Security Expert" that cannot point to sound risk analysis as the basis for their recommendations, or support logical tradeoffs, but would instead prefer to spout dogma and CWEs without even understanding how to perform a risk analysis, are naught but Security Hacks, and their Expertise is not worth the toilet paper they printed it on.
Nitekim, biz Havalimanı Güvenlik olduğu anlamsızlığını edinmektir.
But before we talk about the appropriate tradeoffs to make in THIS SITUATION, let's take a look at the apparent risks (apparent, because we don't have all the background information on this situation, we are all hypothesizing - since the question is what hypothetical situation might there be...)
Let's assume a LOW-VALUE system, yet not so trival that it's public access - the system owner wants to prevent casual impersonation, yet "high" security is not as paramount as ease of use. (Yes, it is a legitimate tradeoff to ACCEPT the risk that any proficient script-kiddie can hack the site... Wait, isn't APT in vogue now...?)
Just for example, let's say I'm arranging a simple site for a large family gathering, allowing everyone to brainstorm on where we want to go on our camping trip this year. I'm less worried about some anonymous hacker, or even Cousin Fred squeezing in repeated suggestions to go back to Lake Wantanamanabikiliki, as I am about Aunt Erma not being able to logon when she needs to. Now, Aunt Erma, being a nuclear physicist, isn't very good at remembering passwords, or even with using computers at all... So I want to remove all friction possible for her. Again, I'm NOT worried about hacks, I just dont want silly mistakes of wrong login - I want to know who is coming, and what they want.
Anyway.
So what are our main risks here, if we symmetrically encrypt passwords, instead of using a one-way hash?
- Kullanıcıların kimliğine bürünerek? Hayır, ben zaten ilginç değil, bu riski kabul ettik.
- Evil yönetici? Birisi başka bir kullanıcı, iç ya da hayır ... ve zaten kötü niyetli bir yönetici taklit eğer Eh, belki ... Ama yine ben dikkat dont olacak şifrenizi almak no matter what - yönetici kötü gitti ise, onun zaten oyun bitti.
- Another issue that's been raised, is the identity is actually shared between several systems. Ah! This is a very interesting risk, that requires a closer look.
Let me start by asserting that it's not the actual identity thats shared, rather the proof, or the authentication credential. Okay, since a shared password will effectively allow me entrance to another system (say, my bank account, or gmail), this is effectively the same identity, so it's just semantics... Except that it's not. Identity is managed seperately by each system, in this scenario (though there might be third party id systems, such as OAuth - still, its seperate from the identity in this system - more on this later).
As such, the core point of risk here, is that the user will willingly input his (same) password into several different systems - and now, I (the admin) or any other hacker of my site will have access to Aunt Erma's passwords for the nuclear missile site.
Hmmm.
Burada bir şey sizin için kapalı görünüyor mu?
Bunu yapması gerekir.
Let's start with the fact that protecting the nuclear missiles system is not my responsibility, I'm just building a frakkin family outing site (for MY family). So whose responsibility IS it? Umm... How about the nuclear missiles system? Duh.
Second, If I wanted to steal someone's password (someone who is known to repeatedly use the same password between secure sites, and not-so-secure ones) - why would I bother hacking your site? Or struggling with your symmetric encryption? Goshdarnitall, I can just put up my own simple website, have users sign up to receive VERY IMPORTANT NEWS about whatever they want... Puffo Presto, I "stole" their passwords.
Yes, user education always does come back to bite us in the hienie, doesn't it?
And there's nothing you can do about that... Even if you WERE to hash their passwords on your site, and do everything else the TSA can think of, you added protection to their password NOT ONE WHIT, if they're going to keep promiscuously sticking their passwords into every site they bump into. Don't EVEN bother trying.
You don't own their passwords strong> Bir başka ifadeyle, bu yüzden sizin gibi davranmaya çalışıyor durdurmak.
Yani, benim Sevgili Güvenlik Uzmanları, Wendy sormak için kullanılan eski bir bayan olarak "NEREDE risk?"
Yukarıda dile getirilen bazı konulara cevap başka birkaç nokta:
- CWE bile değil, bir yasa ya da yönetmelik veya bir standarttır. Bu "En İyi Uygulamalar" tersi, yani common weaknesses topluluğudur.
- Paylaşılan kimlik sorunu gerçek bir sorun, ama burada Muhaliflere tarafından yanlış anlaşılan (ya da yanlış) olduğunu. Bu kendi kimliğini paylaşan bir konudur (!) DEĞİL, düşük değer sistemleri üzerinde şifreleri çatlama hakkında. Eğer düşük bir değer ve yüksek değer sistemi arasında bir şifre paylaşımı ediyorsanız, sorun orada zaten!
- Tarafından tarafından, önceki nokta aslında AGAINST OAuth ve hem de bu düşük değer sistemleri için gibi ve yüksek değerli bankacılık sistemlerini kullanarak işaret eder.
- Ben sadece bir örnek olduğunu biliyorum, ama (ne yazık ki) FBI sistemleri gerçekten en etrafında güvenli değildir. Oldukça kedinizin blogunuzun sunucular gibi, ama ne de daha güvenli bazı bankalar aşmak yok.
- Şifreleme anahtarlarının bölünmüş bilgisi, ya da çift kontrol, aslında PCI-DSS şimdi requires Bu temelde tüm tüccarlar, bu yüzden onun gerçekten şimdiye kadar orada artık (sadece askeri ne yoksa değer ) onu haklı.
- Bu gibi sorular geliştirici meslek bu kadar kötü görünüyorsun kılan olduklarından şikayet etmektedirler herkese: Bu güvenlik mesleği daha da kötü görünmesi olanlar gibi cevaplar. Yine, iş odaklı risk analizi aksi takdirde kendinizi işe yaramaz hale, gerekli olan budur. Yanlış olmasının yanı sıra.
- Ben sadece normal bir geliştirici almak ve farklı düşünmek eğitim olmadan, ona daha fazla güvenlik sorumlulukları bırakın ve doğru tradeoffs bakmak için iyi bir fikir değil bu yüzden sanırım. Hiçbir suç, burada o sizin için, ben bunun için tüm kulüpler - ama daha fazla eğitim için olduğunu.
Whew. What a long post...
But to answer your original question, @Shane:
- Müşteriye şeyler yapmak için doğru yolu açıklar.
- Hâlâ ısrar ederse, iddia, ısrar, biraz daha açıklar. Gerekirse, bir sinir atmak.
- Ona İŞ RİSKİ açıklayın. Detaylar rakamlar iyi, iyi, canlı bir demo iyi genellikle.
- IF HE STILL insists, AND presents valid business reasons - it's time for you to do a judgement call:
Is this site low-to-no-value? Is it really a valid business case? Is it good enough for you? Are there no other risks you can consider, that would outweigh valid business reasons? (And of course, is the client NOT a malicious site, but thats duh).
If so, just go right ahead. It's not worth the effort, friction, and lost usage (in this hypothetical situation) to put the necessary process in place. Any other decision (again, in this situation) is a bad tradeoff.
Yani, alt çizgi ve gerçek bir cevap - basit bir simetrik algoritma ile şifrelemek şifreleme güçlü ACL ile anahtar ve tercihen DPAPI veya benzeri korumak, bunu belgelemek ve istemci (bu karar için yeterli kıdemli birisi) kapalı oturum var o.