ortak anahtar crytography uygulama

4 Cevap php

Benim şirkette hassas verileri şifrelemek için PHP mcrypt modülünü kullanarak edilmiştir. Bu iyi çalışıyor. Ancak, herhangi bir veri şifresini gerekir yeni bir ana parola oluşturmak için talep edilmiştir. Sorun bu ana parola komut dosyası kodlanmış olması gerekir olmasıdır. Ben yanlış ama tek güvenli yolu komut bir ortak anahtar kodlamalısınız ve güvenli özel anahtarı tutmak ve gerektiğinde şifresini çözmek için kullanım sırasında verileri şifrelemek için kullanmak gibi görünüyor varsa lütfen beni düzeltin.

mcrypt böyle bir plan için bir uygulama var görünmüyor. Herkes bu yapacağını bir kütüphane (PHP modül veya saf PHP) biliyor mu?

4 Cevap

Ben PHP OpenSSL bağlamaları bir göz alarak ve özellikle openssl_public_encrypt() function öneririz. Sen gerçekten komut içine bir ana ortak anahtar gömmek, ve betikleri şifrelemek bu genel anahtar ile her kullanıcının AES anahtarı olabilir. Güvenli şirkette gelen ana özel anahtarı tutmak.

Eğer, şifreli kullanıcı anahtarını çekin ana özel anahtarı ile deşifre ve sonra özgün verilerin şifresini istiyorum, ana şifresini işlevini ihtiyaç gerekir.

Bunun için bir PECL uzantısı var. http://us2.php.net/manual/en/book.gnupg.php

http://devzone.zend.com/article/1265: çok hızlı olmak zorunda değilse de, php Gnupg komut satırı aracını kullanabilirsiniz

Ben iki yöntemi denemedim.

Ben bu işe nasıl görmüyorum. (Eğer NSA konum ve algoritmalar kapılarını geri koymak sürece) herhangi iki yönlü bir şifreleme fonksiyonu sadece şifrelemek için kullanılan özel bir şifre beslenen şifresini çözmek için gidiyor. Siz iki şifre aynı dosyanın şifresini olamaz (karma çarpışmalar olmadığı sürece, ancak kolayca ne yapabilir bir şey değil).

Bildiğim kadarıyla programda ana parolanızı saklanması gibi, bu programın okur ayrı bir dosyada saklamak için çok daha iyi olurdu, böylece bu dosya üzerinde sıkı OS düzeyinde güvenlik kullanabilirsiniz.

Zihin mcrypt tutun açık anahtar şifreleme değil. Açık anahtar şifrelemesi ile, olsa, ne istediğinizi yapmak mümkün olabilir. Örneğin, PGP / GPG ile, birbirlerinin özel anahtarları bilmeden, üç farklı kullanıcılar kendi özel anahtarlarını kullanarak çözebilir böyle bir dosyayı şifreleyebilirsiniz. Yani her şeyi şifresini çözebilir ana şifre ile sanal bir kullanıcı olabilir.

Başka bir seçenek tüm şifrelenmiş verilerin iki kopyasını tutmak olacaktır; bir kullanıcının şifre ile şifrelenmiş ve bir ana parola ile şifrelenir.

Sadece bu master password sizin ihtiyacının emin olmak için,

  1. Is it expected to be used only as a 'encrypt this' command that will 'seal' something
    which can then only be opened by someone knowing the private key in question? Or,
  2. Is it something you expect to open any encryption done in the enterprise?
    • Ben sadece cümleleme bu ikinci şekilde de yorumlanabilir değil emin olmak istiyorum
    • your phrase 'decrypt any data' sounds dangerous
      (and not-feasible/practical with asymmetric key encryption)


Yorumlarınız dayalı güncelleme.

  • You are planning for two copies of the data each encrypted with different keys
    • one copy is to be encrypted with the master public key
      • can be decrypted with anyone having the master private key
        the master private key must then be secured (public key is not critical)
    • second copy Rijndael 256 anahtarla şifreli olması
  • purpose is to allow the master to decrypt the data whenever required
    particularly, in the absence of the individual who encrypted it

This approach will work for, easy access of the data by the individual with the Rijndael key,
without need for intervention by the master private key owner.
And, when the master private key owner is trusted with the secrecy of the data.

Sizin düzeni kullanıcı kendi kopyasını güncellemeleri her zaman (biri eski ve yeni bir re-şifreleyerek silme) ana kopyasını güncellemeniz gerekir.


Bununla birlikte, eğer user data is trusted with the master (burada açık bir şekilde olduğu gibi),

  • an easier approach ustadan Rijndael anahtarı sorunu olacaktır
  • Usta bu usta-genel anahtarla kendisi ile şifrelenmiş tutmak olabilir
  • The data can then be encrypted with just the issued Rijndael key
    • it will always be accessible with the master-private key
      which can open the user's Rijndael key

If the user needs to sign the data, that can be accomplished separately in the process.
It will save you from keeping double copies and maintaining them.


To sign the data, kullanıcı onlar tarafından oluşturulan aa anahtar çifti olabilir.

  • Rijndael özel anahtarı ile verileri şifreleyerek önce
  • master-public key user-private-key buna eklenebilir ile şifrelenmiş
  • the user-public key shared with the master (at least)
    will be sufficient to authenticate that the user has provided the data
  • In a worst-case scenario, if the user is unavailable and the key confirmation fails,
    the master may be trusted on the authenticity of the data -- which can still be decrypted