Güvenli giriş: PHP ve JavaScript ortak anahtar şifreleme

7 Cevap php

HTTPS gerek kalmadan, "normal" kullanıcı adı / şifre giriş formu güvenli hale getirmek için çalışıyorum. Benim fikrim şudur:

  • Sunucu asimetrik şifreleme algoritması çeşit bir keypair oluşturur. Bu tür (ya da belki yerel oturum veri) geçici bir tabloda bu keypair saklar.
  • Sunucu istemciye formu gönderir ve kamu anahtarını içerir.
  • Kullanma formu doldurur.
  • Bu sunucuya gönderilmeden önce, Javascript verilen ortak anahtarını kullanarak şifreyi şifreler.
  • Form gönderilir.
  • (Onu bulmak için ortak anahtarını kullanarak, geçici tablodan alır) özel anahtar ile sunucu şifresini çözer.

Ne bunun için bilmeniz gerekenler:

  • Hangi şifreleme yöntemi kullanmak daha iyi? RSA?
  • PHP nasıl şifre şifresini çözebilir?
  • Ve belki de en zor olanı, nasıl JavaScript şifresini şifrelemek yapabilir?

7 Cevap

Önceden: Ben negatif, ancak davrandığım için özür dilerim;

Kendi güvenlik protokolünü uygulayarak never iyi bir fikir, bir yüksek eğitimli güvenlik uzmanı sensin, ya aslında gerçekten güvenlik konusunda bakım ve sadece güvenlik bir izlenim (pazarlama) oluşturmak istemiyorum sürece olan ve komut kiddies durdurun.

SSL kesinlikle böylece yorumlarınızı söylemek bir parmak izi kilit, değil, jCryption ve teklifi size kapıyı açmak için iki haneli bir kod girebilirsiniz bir kapıya sahip eşit ve sonsuz sayıda yeniden deneme var. Bu gerçekten ilgi ve sadece geçirerek değilseniz kırmak için zor, ama sen o evde almak istiyorum (ve muhtemelen, başka güvenlik ihtiyaç olmaz) eğer, içeri alacaksınız

Başka bir nokta insanlar genellikle ne elde etmek istediğinizi belirtmeyi unutmayın olmasıdır. Güvenlik ünlü üç CIA adlandırılan bileşen, yani gizliliği, bütünlüğü ve kullanılabilirliği vardır. Bu size taşıma gizli veya bütünlüğü önemlidir veri (yani gönderilen veri beklediğiniz bir ve ortada olmayan adam geliyor eminiz) önemli sizin için mi?

Bu durumda somut hale getirmek için, burada elde tek şey çizgi geçirerek neyin pasif bir saldırganın göremiyorum ki. Kısa sürede saldırgan aktif alır ve yollarına mesajları değiştirir gibi, bütün güvenlik yıkılır. Yani benim tavsiyem sadece uzmanlar ile geldi çözüm sopa olacaktır (bu durumda TLS, bu onun eski sürüm olduğu ssl değil) ve sadece sunucu desteklediğinden emin olun.

edit:

Btw, SSL / TLS sertifikaları olmadan çalışamaz. Genel anahtar kriptoda bütün mesele en azından bir yerde, bazı güvenilir parti olması gerektiğidir.

Eğer kullanıcıların bir "geçersiz sertifika" mesajı alacak umurumda değil eğer Öte yandan, sadece gerçekten kolay kendi sertifika oluşturabilirsiniz. Sertifika tarayıcılar tarafından güvenilir olmadığı durumda, ancak, sen (... hala tamam, bu durumda istisnalar vardır, ama) en azından iletişim güvenli olduğundan emin olabilirsiniz

Sertifikalar için ücretsiz olması gerektiğini argümanı bakış perspektif açısından gerçekten. Ben bu ahmakça / sahte olduğunu iddia eden insanların, bir sertifika yetkilisi olmak için gerekenlere bilmiyorum düşünüyorum. Bu şirketler, güvenli iletişimi sağlamak için milyonlarca yatırım ve emin onlar sertifikaları satan dışında güzel para kazanmak, ama hey, kendi iş ve onlar da sadece diğerleri gibi, para kazanmak için hak ediyor.

edit2: after comments

Ben gerçekten güvenli bir iletişim var olduğunu söylüyorlar. Ancak, kendinden imzalı sertifikalar ile size güvenli konuşmak kime bilmediğin noktası özledim. Bir konuşma dinlemelerini tamamen izole karanlık bir oda düşünün. Şimdi ve ışık olmadan böyle bir oda arasındaki farkı düşünün. Oda ışığı varsa, aslında güvenli bir şekilde konuştuğunuz kime görebilir ve sadece choose güvendiğiniz gibi insanlarla konuşmak. Şimdi tamamen karanlık bir odada aynı şeyi düşünün. Yalnızca bu karanlık odanın içinde konuşmak adam sadece bir müttefik değil, senin düşman olduğunu umuyoruz. Ancak, bunun tamam olduğunu, sadece hope, bunu bilmiyor olabilir. Konuşma kendini güvenli olmasına rağmen, kimse de dinleyebilirsiniz, yine "tam" güvenliği yok.

Ben, bir sahtekâr olmak, man-in-the-middle saldırı yaparsanız, ben kullanıcı farkında olmadan kendinden imzalı bir sertifika oluşturabilirsiniz. Yani kendinden imzalı sertifikalarla TLS kullanarak avantajı protokol Corrent en az uygulama var (ve hatta bu uygulama çok kolay değil) olmasıdır. Ayrıca elle kez sertifikaya güvenmek için kullanıcıların danışmanlık tarafından çirkin uyarıları önleyebilirsiniz. Eğer bir kamu web sitesi için geri dönen ziyaretçi nispeten küçük bir grup, bu gerçekten bir çözüm değil varsa Ancak, bu mümkündür.

Bu müşterinin bakış açısıyla bu güvenli görünmüyor. İki (ilgili) sorunlar:

  1. How does the client trust the server? nasıl anahtar Sever'in başvuru kendisine ait biri olduğunu doğrulayabilir?
  2. It's possible to do man-in-the-middle attacks. Kötü niyetli bir vekil dışarı şerit ve istemci kendi yerine, onu görmeden kamu anahtarını saklamak, daha sonra istemci kimlik doğrulama yaparken, saklamak ve yeniden şifrelemek ve böylece yanıtı göndermek şifresi istemci şeyler döndüğünü fark etmez.

Ne sıradan SSL nesi var? Aksi satıcıları ve kuruluşlar o gecede desteği düşeceği, bu kadar güvenli bir uzlaşma olmak zorunda. Buna karşılık, "ucuza" güvenlik yapmak için bir funky yeni bir yol icat en girişimleri genellikle temel bir şey özledim.

Bu ne yapmak istediğinizi bir sürü jquery eklentisi tarafından sağlanan benziyor JCryption. Hatta arka uç olarak PHP, bu yüzden sizin için iyi bir uyum varsayar.

Puan verenler nerede istediğiniz benzer bir şey yapar:

  1. Sunucu, bir meydan okuma dizesi oluşturur formuna bu ekler. [1]
  2. Müşteri MD5 parola karma tarafından tepki oluşturur, daha sonra MD5 önüne meydan okuma ile önceki karma karma [2].
  3. Server daha sonra 2. adımda aynı yanıtı sonucu karşılaştırarak yapar, tepki, çekler meydan geçerliliğini alır.

Bu çok iyi bir fikir olduğunu ve zaten yapılmış. Bkz jCryption.

jCryption ilginç görünüyor, ben daha önce görmedim.

Ama SSL ile sorunun ne olduğunu sormak gerekir?

Şifreleme kodu doğru yapmak herkesin bildiği zordur, ve tarayıcılar ve http sunucularında bulunan SSL uygulamaları çok daha titizlikle test edilmiş ve jCryption şeyler daha gözden bahse girebilirsiniz.

O dedi, kesinlikle SSL önlemek için gerekirse jCryption düzgün görünüyor, ve süper-hassas bilgileri ile ilgili değiliz.

Sunucuda şifrelenmiş yöntemi parolaları depolayarak sunucu şifreleri almak ve istemci tarafından gönderilen checksum doğrulamak. Bir oturum şifre göndermek ve oturumu parola hash ve kullanıcı girilen şifre yapmak sunucudaki aynı yapmak ve iki sağlamalarının karşılaştırmak için müşteri isteyin.

Bu MITM kullanıcıları güvenli olmayacak - yerel yöneticileri, NSA, telekom, yönlendirici hijacks, ama açık WLAN güvenli parola tutacak.