it-swarm-tr.com

Özel anahtarı ortak anahtar olarak kullanabilir miyim?

Ortak bir anahtar kullanarak veri şifrelemek ve özel bir anahtar kullanarak şifresini çözmek için kod var. Bu, bir istemci bir sunucuya veri göndermek istediğinde ve yalnızca sunucunun şifresini çözebileceğini bildiğinde yararlıdır.

Ancak sunucunun private anahtarını kullanarak verileri şifrelemesini ve public anahtarını kullanarak şifresini çözmesini istediğimi ve bunun doğrulanmış olabilecek verileri dağıtmanın bir yolu olduğunu varsayalım doğru sunucu. Buna izin vermek için kodu değiştirmek yerine, yalnızca özel anahtarı yayınlayabilir ve ortak anahtarı gizli tutabilir miyim? Bu sistemin güvenliğini etkiler mi?

39
Graeme Perrow

Ancak, sunucunun, özel anahtarı kullanarak verileri şifrelemesini ve doğru anahtarı kullanarak doğrulanmış verileri dağıtmanın bir yolu olarak genel anahtarı kullanarak şifresini çözmesini istediğimi söyleyin.

Bunu yapabilirsiniz - bu, çok basit bir düzeyde, RSA imzalamanın nasıl çalıştığıdır (not, basit - biraz daha fazlası var).

Buna izin vermek için kodu değiştirmek yerine, yalnızca özel anahtarı yayınlayabilir ve ortak anahtarı gizli tutabilir miyim? Bu sistemin güvenliğini etkiler mi?

Siz özel anahtarı hiç yayınlamanız gerekmez - RSA bir Trapdoor permütasyonudur, yani:

  • Genel bir anahtarla şifrelerseniz, özel anahtarın şifresini çözebilirsiniz.
  • Özel bir anahtarla şifrelerseniz, genel anahtarla şifresini çözebilirsiniz.

Bu nedenle RSA, yalnızca ortak anahtara sahip son kullanıcıya hem imzalama hem de şifreleme yapmayı destekler.

Durumunuzda, istemci sunucudan gelen verileri doğrulamak istiyorsa, ikinci RSA örneğini uygular ve zaten sahip olduğunuz ortak anahtarı kullanarak imza verilerinin şifresini çözersiniz.

Ayrıca, bu bir permütasyon olduğu için kodunuzu hiç değiştirmeniz gerekmez. Her iki tuş da aynı işlevi kullanarak çalışmalıdır. Herhangi bir iyi kripto kütüphanesinin mevcut standartlara göre imzaları doğrulamak için API'leri olmasını beklerdim - bunlardan biri muhtemelen iyi bir bahis olacaktır.

RSA Laboratuvarları Güzel bir bunun açıklaması sağlar.

Bunu sunucular arasında genişletmek veya istemci iletişimini doğrulamak istiyorsanız - her varlık için anahtarlar oluşturun ve genel olanları değiştirin. İşlem daha sonra her iki uçta da kullanılabilir.

Teorik olarak, e ve d birbiriyle değiştirilebilir (bu yüzden RSA çalışır) (biri gizli olarak tanımlanmalı ve gizli tutulmalıdır), ancak p ve q her zaman olmalıdır bunlar gizli tutulur, çünkü bunlar d'den e ve tersini elde etmenizi sağlar. Ancak, özel anahtarı anlamada son derece dikkatli olmanız gerekir - yazılımınız p/q'yu özel anahtarda saklıyor mu? Öyleyse, olduğu gibi yayınlayamazsınız. Ayrıca, birbiriyle değiştirilebilir dediğimde - bu çiftten birini yayınladığınızda (modül n ile birlikte e veya d) diğerini hayatınızla korumalısınız. Pratik olarak Graeme'nin yorumlarda bağlantılı olduğu gibi e genellikle küçük/sabit bir değer olarak seçilir. E/d'nin birbiriyle değiştirilebilir olması hakkındaki yorumum, e kolayca belirlendiğinde geçerli değildir. Dolayısıyla bu tür bir şey yapmak karışıklık ve yanlış uygulama potansiyeline sahiptir. Üçüncü taraf bir kütüphane kullanın/özel anahtarları yayınlamaya başlamayın.

51
user2213

Evet, özel bir anahtar kullanarak şifreleyebilir ve genel bir anahtar kullanarak şifresini çözebilirsiniz, özel anahtarınızı dağıtmayın (özel anahtarlar ortak anahtarlar oluşturabilir ve tüm şifreleme sisteminiz artık işe yaramaz), böyle bir şey yapmak istediğinizi varsayıyorum bu:

Sunucu verileri şifreler, istemcilere gönderir.

İstemcilerin genel anahtarı vardır ve sunucudaki verilerin şifresini çözebilir.

Bu durumda, sunucu hem şifreleme hem de şifre çözme yapıyorsa, neden asimetrik bir kripto uygulaması istediğinize dair hiçbir fikrim yok.

Kural her zaman geçerlidir: özel anahtar gizli kalır ve sunucudan ayrılmaz.

9
StrangeWill

Ancak sunucunun özel anahtarı kullanarak verileri şifrelemesini ve genel anahtarı kullanarak şifresini çözmesini istediğimizi söyleyin:

Sunucu, özel anahtarını kullanarak verileri şifreleyebilir ve alıcı, sunucuların ortak anahtarlarını kullanarak şifresini çözebilir, bu mümkündür. Bununla birlikte, bu senaryo bir belgeyi dijital olarak imzalamak için kullanılır ve siz dediğiniz gibi, yalnızca ilgili anahtar (sunucunun genel anahtarı) kullanılabileceğinden, "doğru sunucudan geldiği doğrulanmış verileri dağıtmanın bir yolu" verilerin şifresini çözmek. Sunucunun ortak anahtarı, sunucu tarafından oluşturulan ve dijital olarak imzalanan ilgili dijital sertifika ile doğrulanır.

sadece özel anahtarı yayınlayabilir ve ortak anahtarı gizli tutabilir miyim?

Adından da anlaşılacağı gibi özel anahtarı asla yayınlamamalısınız.

Bu sistemin güvenliğini etkiler mi?

Evet, ayrıca bu sistem uygun değildir, örneğin, Diffie-Hellman (en yaygın kullanılan anahtar değişim protokollerinden biri) kullanıyorsanız, sunucu ve tüm istemciler, oturum anahtarlarını hesaplamak için kullanılan genel değerleri paylaşmak zorundadır . Dolayısıyla, kullanıcı olarak özel anahtarınızı yayınlarsanız, genel anahtarı hesaplamak çok kolaydır, bu da mümkün olmayan veya çok zor.

2
Ishtiaq Hussain

Özel anahtarla şifreleyip genel anahtarla şifreyi çözüp çözemeyeceğinizi bilmiyorum, ancak çözebiliyorsanız, şifre çözme anahtarı herkese açık olduğundan çok güvenli olmaz - özel anahtarınız gizli tutulmalıdır.

Yalnızca iletiyi gönderenin doğrulandığını doğrulamak istiyorsanız, bunun yerine verileri gönderenin özel anahtarını kullanarak imzalarsınız ve alıcı, gönderenin ortak anahtarını kullanarak imzayı doğrular.

Hem verileri şifrelemek hem de göndereni doğrulamak istiyorsanız, her ikisi de özel anahtarın açığa çıkmasını gerektirmeyen şifreleme ve imzalama yaparsınız.

0
hmallett