Web programcıları asla kriptografiyi kendileri uygulamaya asla denememeleri gerektiğini bilmelidir .
Özellikle, bu hiçbir güvenlik uzmanının şifreleme ilkelerinin hiçbirine doğrudan dokunmaması gerektiği anlamına gelir. AES, SHA-1 vb. Seviyelerinde düşünmemeliler. Bunun yerine, mesajları şifrelemek, imzalamak ve şifreleri "hash" yapmak için üst düzey işlevler kullanmaları gerekir.
Niye ya? Çünkü aksi takdirde, insanlar şunu düşünerek yanlış yönlendirilir:
- AES-256, ECB modunda kullandıkları veya rastgele olmayan IV değerleri vb. Kullandıkları gerçeğine rağmen, "mükemmel şifreleme" dir. (Bazı modlarda, rastgele olmayan ancak benzersiz IV'ler iyidir. çok fazla.)
- Birden fazla mesajı şifrelemek için aynı simetrik anahtarı kullanabilirler (veya daha kötüsü, simetrik anahtarı doğrudan kullanım için kodda saklarlar).
- Anahtar türetme işlevlerini kullanmadan doğrudan bir anahtar olarak bir parola kullanmaya bile karar verebilirler.
- Verileri doğrudan şifrelemek için RSA'yı kullanabilirler.
- Güvende olmaları için şifrelerini "tuzlandırabilir ve MD5" kullanabilirler. (Gökkuşağı tablolarının en zayıf halka olduğunu düşünüyorsanız, tekrar düşünün .)
Sadece aynı sayfada olmak için yukarıdaki öğelerin hiçbiri tamam değil . Bunu anlamıyorsan, 10 metrelik bir direkle kriptoya dokunmamalısın! (AES-256 olan düzgün kullanmak sadece ama eğer, büyük bir şifreleme. "Bu konular, bu onu ne olduğunu boyutu değil." :-))
Ne tür üst düzey işlevlerden bahsediyorum? Kişisel olarak bir OpenPGP (durgun veriler için) veya SSL (hareket halindeki veriler için) kütüphanesinin kullanılmasını tavsiye ederim. Bu protokoller, asimetrik, simetrik ve karma algoritmaların doğru kullanımını kesin olarak belirtir. Örneğin, OpenPGP ile:
- Verileri doğrudan şifrelemek için RSA kullanmaz, bunun yerine mesaj başına rastgele bir oturum (simetrik) anahtarı oluşturur (bu önemlidir) ve bu oturum anahtarını şifrelemek için RSA'yı kullanır.
- Parolaları anahtarlara dönüştürmek için bir anahtar türetme işlevi kullanır. (OpenPGP parlance olarak buna S2K denir, ancak bence "anahtar türevlendirme işlevi" daha standart bir terimdir.)
- İyi bir mod seçmeyi kullanır, böylece ECB kullanmaya asla son vermezsiniz.
- Anahtar yönetimini sizin için yönetir, bu nedenle hangi anahtarların güvenilir olduğu konusunda geçici kararlar vermek zorunda değilsiniz.
Özet: Bir güvenlik uzmanı değilseniz ve AES veya SHA-1 veya (cennet yasağı) MD5 düzeyinde düşünüyorsanız, yanlış yapıyorsunuz . Güvenlik uzmanları tarafından yazılmış (Bouncy Castle gibi), güvenlik uzmanları tarafından tasarlanan protokolleri (şifreleme için OpenPGP veya şifreleme için bcrypt veya scrypt gibi) uygulayan bir kütüphane kullanın.
Hiçbir şekilde bir kripto uzmanı değilim, ancak kendi geçici protokollerimi tasarlamamaya çalışacağımı biliyorum. Sadece açık olmak gerekirse, bu yazının tamamı Kriptografi 101 malzemesidir . Bu yazı% 100 size mantıklı gelmiyorsa, o zaman kesinlikle kriptografinin yanına yaklaşmamalısınız.