Asimetrik şifrelemede şifreleme ve imzalama arasındaki fark nedir?


299

Bazı verileri şifrelemek ile bazı verileri imzalamak (RSA kullanarak) arasındaki fark nedir?

Sadece kamu-özel anahtarlarının rolünü tersine çeviriyor mu?

Örneğin, ileti gönderen özel anahtarımı kullanmak istiyorum, böylece yalnızca gönderen olabilirim. Açık anahtarımın mesajları okumak için kullanılmasını istiyorum ve onları kimin okuduğu umrumda değil. Belirli bilgileri şifreleyip yazılımım için ürün anahtarı olarak kullanmak istiyorum. Bunları yaratabilecek tek kişi benim olmak isterim. Anahtarın imzasını çözmek / okumak için ortak anahtarımı yazılımıma dahil etmek istiyorum. Anahtardaki verileri kimin okuyabileceği umurumda değil, sadece onları üretebilen doğrulanabilir tek kişi olduğumu umursuyorum.

İmzalama bu senaryoda faydalı mı?

Yanıtlar:


443

Şifreleme yaparken, bir ileti yazmak için genel anahtarlarını kullanır ve okumak için özel anahtarlarını kullanırlar.

İmzalarken, mesajınızın imzasını yazmak için özel anahtarınızı kullanırsınız ve gerçekten size ait olup olmadığını kontrol etmek için genel anahtarınızı kullanırlar.

İleti oluşturmak için özel anahtarımı kullanmak istiyorum, böylece yalnızca gönderen olabilirim.

Açık anahtarımın mesajları okumak için kullanılmasını istiyorum ve onları kimin okuduğu umrumda değil

Bu imza , özel anahtarınızla yapılır.

Belirli bilgileri şifreleyip yazılımım için bir ürün anahtarı olarak kullanmak istiyorum.

Bunları yaratabilecek tek kişi benim olmak isterim.

Sadece kendinize bilmeniz gerekiyorsa, bunu yapmak için anahtarlarla uğraşmanıza gerek yoktur. Sadece rastgele veriler üretebilir ve bir veritabanında tutabilirsiniz.

Ancak insanların anahtarların gerçekten size ait olduğunu bilmelerini istiyorsanız, rastgele veriler oluşturmanız, veritabanında tutmanız ve anahtarınızla imzalamanız gerekir.

Anahtarın imzasını çözmek / okumak için ortak anahtarımı yazılımıma dahil etmek istiyorum.

Muhtemelen ortak anahtarınız için Verisign veya Thawte gibi ticari bir sağlayıcıdan bir sertifika satın almanız gerekecektir, böylece insanlar kimsenin yazılımınızı sahte yapmadığını ve ortak anahtarınızı onlarınkiyle değiştirmediğini kontrol edebilir.


7
Teknik olarak, mesajın imzasını yazmak için özel anahtarın kullanıldığını söylediğinizde, mesajın karmasının özel anahtarımla şifrelenmekte olduğunu mu söylüyorsunuz?
Andy Ibanez

4
@AndyIbanez: şifrelenen ( sindirim ) zaman damgası ve rastgele bir tuz da içerebilir, ancak evet, bunun özü budur.
Quassnoi

7
@Quassnoi Aslında 'özel anahtarla imzala' dediğimizde 'şifrelemek' değil, 'şifresini çözmek' anlamına gelir. Kabaca konuşan mesajın özel anahtarla şifrenin çözülmesi ile aynı olduğunu ve alıcının ortak anahtarla şifrelemesini sağlayın, bu şekilde karma aynı olur ve karşılaştırılabilir.
Johnny Willer

5
@JohnnyWiller: aşağıda belirtildiği gibi, matematiksel çekirdek hem şifreleme hem de şifre çözme işlevleri için aynıdır. Ayrı işlevler değiller, aynı işlevler f(key, message), öyle kif(private, f(public, message)) === f(public, f(private, message)) === message
Quassnoi

2
@ Hayır hayır değil. Anahtar çiftini oluşturmak ücretsizdir. Maliyet, diğerlerinin imzanın gerçekten size ait olduğuna inandırmakla ilgilidir. Bunu yapmak için, daha önce ücretsiz olarak oluşturduğunuz ve bunun için para talep edebilecek veya etmeyebilecek bir otorite tarafından imzalanmış olan ortak anahtarınız vardır.
Quassnoi

144

RSA kripto parasında, bir anahtar çifti oluşturduğunuzda, hangisinin ortak anahtar olmayı seçeceğiniz ve hangisinin özel anahtar olduğu tamamen keyfidir. Biriyle şifrelerseniz, diğeri ile şifresini çözebilirsiniz - her iki yönde de çalışır.

Bu nedenle, alıcının ortak anahtarıyla bir mesajı nasıl şifreleyebileceğinizi görmek oldukça kolaydır , böylece alıcı özel anahtarıyla şifresini çözebilir .

İmza, imzalayanın bazı ortak anahtarlarla eşleşen özel anahtara sahip olduğunun kanıtıdır. Bunu yapmak için, iletiyi söz konusu gönderenin özel anahtarıyla şifrelemek ve düz metin sürümünün yanına şifrelenmiş sürümü dahil etmek yeterli olacaktır . Göndereni doğrulamak için şifrelenmiş sürümün şifresini çözün ve düz metinle aynı olup olmadığını kontrol edin.

Tabii ki, bu mesajınızın gizli olmadığı anlamına gelir. Herkesin şifresini çözebilir, çünkü ortak anahtar iyi bilinir. Ancak bunu yaptıkları zaman, şifre metninin yaratıcısının karşılık gelen özel anahtara sahip olduğunu kanıtlamışlardır.

Ancak bu, iletiminizin boyutunu iki katına çıkarmak anlamına gelir - düz metin ve şifreli metin birlikte (imzayı doğrulamakla ilgilenmeyen kişilerin mesajı okumasını istediğinizi varsayarsak). Bunun yerine, düz metnin bir karmasını oluşturarak tipik olarak bir imza oluşturulur . Sahte karmaların oluşturulamaması önemlidir, bu nedenle SHA-2 gibi şifreleme karma algoritmaları kullanılır.

Yani:

  • İmza oluşturmak için düz metinden bir karma yapın, özel anahtarınızla şifreleyin, bunu düz metnin yanına ekleyin.
  • Bir imzayı doğrulamak için, düz metinden bir karma yapın, gönderenin ortak anahtarıyla imzanın şifresini çözün, her iki karma'nın da aynı olup olmadığını kontrol edin.

8
@headcode sadece asimetrik tuşlar için geçerlidir. Simetrik anahtarlar çift olarak gelmez.
ince

3
Aslında, sadece RSA anahtarları için geçerlidir. Örneğin, ECDSA anahtarları ile özel anahtarı ortak anahtardan önemsiz bir şekilde oluşturabilirsiniz ve ortak anahtar bir koordinat iken özel anahtar bir skalerdir.
David Schwartz

5
PUBLIC anahtarlarıyla mesajların şifresini nasıl çözebilirsiniz? İletilerin şifresi yalnızca özel anahtarlarla çözülmez mi?
daremkd

3
Bu cevapla çelişen 5 kaynak 1 , 2 , 3 , 4 , 5
wha7ever

6
Hangisini genel ve özel olarak adlandırdığınız keyfi değildir. Ortak anahtarı özel anahtardan oluşturabilirsiniz, ancak özel anahtarı ortak anahtardan oluşturamazsınız. Bu büyük bir fark değil mi?
Greg Schmit

25

Güvenli bir iletişimin kurulmasında iki belirgin fakat birbiriyle yakından ilişkili sorun vardır

  1. Yalnızca şifreli kişilerin şifresini çözüp okuyabilmesi için verileri şifreleyin.
  2. Gönderenin kimliğini / kimlik doğrulamasını doğrulayın.

Bu sorunların her ikisi de ortak anahtar şifrelemesi kullanılarak zarif bir şekilde çözülebilir.

I. Verilerin şifrelenmesi ve şifresinin çözülmesi

Alice, Bob'a kimsenin okumaması gereken bir mesaj göndermek istiyor.

  • Alice, mesajı Bob'un ortak anahtarıyla şifreler ve gönderir.
  • Bob mesajı alır ve özel Anahtarını kullanarak şifresini çözer.

A, B'ye bir mesaj göndermek istiyorsa, A'nın B'nin Genel anahtarını kullanması gerektiğini (ki bu herkesin kullanımına açıktır) ve A'nın ne genel ne de özel anahtarının burada göründüğünü unutmayın.

Eğer bana bir mesaj göndermek istiyorsanız, size verdiğim ortak anahtarımı bilmeli ve kullanmalısınız ve karşılık gelen özel anahtara erişimi olan tek kişi olduğum için mesajın şifresini çözebiliyorum.

II. Gönderenin kimliğini doğrulayın (Kimlik Doğrulama)

Alice tekrar Bob'a bir mesaj göndermek istiyor. Verilerin şifrelenmesi sorunu yukarıdaki yöntem kullanılarak çözülür.

Ama ya Alice ve Bob arasında oturursam, Bob'a 'Alice' olarak kendimi tanıtırsam ve Alice tarafından gönderileni iletmek yerine Bob'a kendi mesajımı gönderirsem ne olur? Alice'in gönderdiği orijinal mesajı (Bob'un özel anahtarına erişmeyi gerektirir) şifresini çözememe ve okumama rağmen, aralarındaki tüm konuşmayı kaçırıyorum.

Bob'un aldığı mesajların gerçekten Alice tarafından gönderildiğini onaylamanın bir yolu var mı?

  • Alice mesajı özel anahtarıyla imzalar ve gönderir. (Pratikte, imzalanan mesajın bir karmasıdır, örneğin SHA-256 veya SHA-512.)
  • Bob onu alır ve Alice'in ortak anahtarını kullanarak doğrular. Alice'in ortak anahtarı mesajı başarıyla doğruladığından, Bob mesajın Alice tarafından imzalandığı sonucuna varabilir.

1
İletiyi imzaladığınızda, gerçek iletinin kendisini mi yoksa şifreli iletiyi mi imzalarsınız?
FrostyStraw

21

Evet, verileri imzalamayı, başka kimsenin sahip olmadığı kendi mum damganız olarak vermeyi düşünün. Başarmak için yapılır bütünlük ve inkarsız . Şifreleme böylece hiç kimse verileri göremez. Bu, gizliliği sağlamak için yapılır . Wikipedia'ya bakın http://en.wikipedia.org/wiki/Information_security#Key_concepts

İmza, özel anahtarınız kullanılarak imzalanan mesajınızın bir karmasıdır.


16

İmzalama, özel anahtarınızla genel anahtarınızla doğrulanabilen bir "karma" üretiyor. Metin net olarak gönderilir.

Şifreleme, verileri şifrelemek için alıcının ortak anahtarını kullanır; kod çözme özel anahtarlarıyla yapılır.

Bu nedenle, anahtarların kullanımı tersine çevrilmez (aksi takdirde özel anahtarınız artık özel olmaz!).


Normal Asimetrik şifrelemede, şifreleme özel anahtarınızla değil alıcıların ortak anahtarıyla yapılır.
mmcdole

Bu sorunun özellikle anahtarların kullanımının tersine çevrildiği ve özel anahtardan ödün vermediği RSA ile ilgili olduğunu kaçırdınız mı?
David Schwartz

8

Ortak anahtar şifrelemesinde imzalamanın tam olarak nasıl ve neden kullanıldığını açıklıyorsunuz. Başkaları tarafından sağlanan rastgele iletileri imzalamanın (veya şifrelemenin) çok tehlikeli olduğunu unutmayın - bu, anahtarlarınızı tehlikeye atabilecek algoritmalara saldırılara izin verir.


1
Web tarayıcıları SSL kullanırken rastgele verileri şifrelemez mi?
Ian Warburton

2
@IanWarburton: Ancak bunun için asimetrik şifreleme kullanmıyorlar. Gerçek veri aktarımları, rastgele oluşturulmuş bir oturum anahtarıyla simetrik şifreleme kullanır.
Michael Borgwardt

1
@IanWarburton: hayır, çünkü ikisi de bir saldırgan tarafından seçilmeyecekti . Tehlike, bir saldırgan tarafından doğrudan sağlanan bir şeyi şifrelemede veya imzalamada yatar, çünkü bu, özel anahtarınızla ilgili bilgileri ortaya çıkarmak için kasten hazırlanmış olabilir ve hatta imzalamak istemediğiniz bir şey için geçerli görünen imzalar oluşturabilir. İkinci davanın RSA için nasıl çalıştığının ayrıntılı bir dökümü burada: crypto.stackexchange.com/questions/35644/…
Michael

2
@IanWarburton: bu yüzden RSA doldurmayı gerektirir, bu yüzden sadece seçili bir mesajı şifrelemezsiniz: en.wikipedia.org/wiki/… - ama gerçekten seçilen girişe karşı özellikle savunmasız olan özel anahtarı (imzalama gibi) içeren işlemler.
Michael Borgwardt

1
@IanWarburton Ben bir şifreleme uzmanı değilim, ama anladığım kadarıyla, bu herhangi bir soruna neden olmamalı.
Michael Borgwardt

8

İmzalama, gerçekten imzalanan nesnenin kaynağı veya makbuzu olduğunuzu gösterir. Yine de herkes nesneyi okuyabilir.

Şifreleme, yalnızca karşılık gelen özel anahtara sahip olanların okuyabileceği anlamına gelir, ancak imzalamadan şifreli nesnenin arkasında olduğunuzun garantisi yoktur.


Mesajın kasık anahtarım tarafından şifresi çözülürse, bunu ancak ben gönderebilirdim. (Özel anahtarımın tehlikeye atılmadığını varsayarsak)
Dojo

5

Bazı verileri şifrelemek ile bazı verileri imzalamak (RSA kullanarak) arasındaki fark nedir?

Şifreleme, mesajın gizliliğini ("bazı veriler") korurken, imzalama reddedilmemesini sağlar: yani yalnızca imzayı imzalayan kuruluş tarafından imzalanmış olabilir. İşlevsel farklılıklar da vardır; Okumaya devam etmek.

Sadece kamu-özel anahtarlarının rolünü tersine çeviriyor mu?

Kesinlikle hayır. İmzalama ve şifre çözme için aynı özel anahtarların (veya aynı şekilde, doğrulama ve şifreleme için aynı ortak anahtarların ) kullanımı, amaçlarını karıştırmamanız gerektiği için kaşlarını çatar. Bu çok matematiksel bir sorun değil (RSA hala güvenli olmalıdır), ancak anahtar yönetimiyle ilgili bir sorun , örneğin imzalama anahtarının daha kısa bir yaşam sürmesi ve kullanılmadan önce daha fazla koruma içermesi gerekir.

Aynı mesaj için, imzalamak için gönderenlerin özel anahtarını ve şifreleme için alıcıların güvenilen ortak anahtarını kullanmalısınız. Yaygın olarak sign-then-encrypt kullanılır, aksi takdirde bir düşman imzayı kendi yerine koyabilir. Benzer şekilde, şifresini çözmek için alıcının özel anahtarını ve doğrulama için gönderenin güvenilir genel anahtarını kullanmanız gerekir .

Ayrıca, imza oluşturmanın "özel anahtarla şifreleme" kullanmadığını anlamalısınız. Tüm RSA işlemleri modüler üslüğe dayanmasına rağmen, dolgu şeması imza üretimi için tamamen farklıdır. Ayrıca, ortak anahtar, RSA'nın tüm pratik kullanımlarında RSA özel anahtarından tamamen farklı özelliklere sahiptir.

Örneğin, ileti gönderen özel anahtarımı kullanmak istiyorum, böylece yalnızca gönderen olabilirim.

Bu, imzasız bir özelliktir ve imzalanarak elde edilebilir.

Açık anahtarımın mesajları okumak için kullanılmasını istiyorum ve onları kimin okuduğu umrumda değil.

Açık anahtar herkes tarafından bilinmelidir. Herkesin mesajları okumasını istiyorsanız, onları şifrelemezsiniz.

İmzalama genellikle mesajın içeriğini etkilemez. Mesaj, imzalardan ayrı kabul edilir. Resmi olarak bu tür imzalar, ekin mesaj olduğu "ekli imzalar" olarak bilinir. Mesajın imzasından daha önemli olduğu için biraz garip bir isim, ama evet. Yalnızca birkaç imza (kısmi) mesaj kurtarma sunar; artık çok fazla kullanılmamaktadır ve genellikle kullanımdan kaldırılmıştır.

CMS gibi imza protokollerinin hem iletiyi hem de imzayı içeren bir kapsayıcı biçimi dağıtabileceğini unutmayın . Bu durumda, ilk önce - hala şifrelenmemiş - mesajı, düz bir .zip arşivinden açmak gibi bir kaptan çıkarmanız gerekir. Bu nedenle mesaj görünümden gizlenmiş olabilir ve bu durumda doğrudan kullanılamaz.

Belirli bilgileri şifreleyip yazılımım için ürün anahtarı olarak kullanabilmek istiyorum. Bunları yaratabilecek tek kişi benim olmak isterim.

Şifreleme gizliliği sağlamak için kullanılır. Geçmişte RSA imza üretimi genellikle "özel anahtarla şifreleme" olarak düşünülüyordu. Bununla birlikte, işlemler yukarıda açıklandığı gibi oldukça farklıdır ve daha sonraki standartlar umutsuzca şifreleme ve imza üretmeyi dener ve ayırır.

Anahtarın imzasını çözmek / okumak için ortak anahtarımı yazılımıma dahil etmek istiyorum. Anahtardaki verileri kimin okuyabileceği umurumda değil, sadece onları üretebilen doğrulanabilir tek kişi olduğumu umursuyorum.

Evet, buna açık anahtara güven sağlama denir . Ancak, program kodunuzu korumak iletileri korumaktan çok farklıdır. Kod imzalama yapabilirsiniz, ancak imzayı kodunuzun dışında kontrol etmek için bir şeye ihtiyacınız vardır . Bunu sunan işletim sistemleri vardır.

Örneğin Microsoft Authenticode var. İStore ve Android uygulama mağazası gibi uygulama mağazaları kod imzalamayı kullanabilir veya kullanmayabilir, ancak uygulamanızın klonlanmadığına veya en azından mağaza içinde klonlanmadığına dair bir miktar güvence sunarlar. Sonuçta, kriptografi her zaman çözüm değildir.

Değişmiş / klonlanmış olmaktan kodunuzu tutulması hiç çok zor olduğunu ve bu şekilde gitmek eğer DRM topraklarında sağlam olurdu.

İmzalama bu senaryoda faydalı mı?

Evet kesinlikle. Açık anahtara güven varsa, iletilerin yalnızca sizin tarafınızdan imzalandığından emin olmanıza yardımcı olabilir. Uygulama kodunuzun / tümleşik genel anahtarınızın kimlik doğrulamasında yardımcı olabilirseniz, tamamen kodu çalıştırmayı beklediğiniz ortama bağlıdır.


"Geçmişte RSA imza üretimi genellikle" özel anahtarla şifreleme "olarak düşünülüyordu. Ancak, işlemler yukarıda açıklandığı gibi oldukça farklı ve daha sonraki standartlar umutsuzca şifreleme ve imza üretmeyi deniyor ve ayırıyor." - bu benim için net değil. KeyPair, pk veya sk olabilir ve birinin şifrelediği, diğerinin şifresini çözebilir. Bunu kabul edersek, imzalamanın ve şifrelemenin anlamlı bir şekilde farklı olduğunu nasıl iddia edebiliriz? Her ikisi de şifrelemek ve daha sonra sadece diğer anahtar ile şifresi çözülebilir. İmzalama işlevlerine referanslar gördüm, bu ilişkili mi?
Morgan

İmzalama işlevinin farkında olduğum tek fark, şifrelemeden önce iletinin karmasıdır.
Morgan

4

Senaryonuzda, asimetrik şifreleme anlamında şifrelemezsiniz; Buna "kodlama" demeyi tercih ederim.

Böylece verilerinizi bazı ikili sunumlara kodlarsınız, daha sonra özel anahtarınızla imzalarsınız. Açık anahtarı kullanarak imzayı doğrulayamazsanız, imzalı verilerin özel anahtarınızla oluşturulmadığını bilirsiniz. ("doğrulama", imzasız verilerin anlamlı olmadığı anlamına gelir)


2

İşlevsel olarak, yalnızca alıcının mesajınızı okuyabildiğinden emin olmak için genel / özel anahtar şifrelemesini kullanırsınız. Mesaj, alıcının genel anahtarı kullanılarak şifrelenir ve alıcının özel anahtarı kullanılarak şifresi çözülür .

İmzalama, alıcının mesajı oluşturduğunuzu ve aktarım sırasında değişmediğini bildirmek için kullanabilirsiniz. Mesaj imzalama, kendi özel anahtarınız kullanılarak yapılır. Alıcı mesajın kurcalanmadığını kontrol etmek için ortak anahtarınızı kullanabilir.

Kullanılan algoritmaya gelince: bu tek yönlü bir işlev içerir , örneğin wikipedia'ya bakın . Bu tür algoritmaların ilklerinden biri büyük asal sayılar kullanır, ancak o zamandan beri daha fazla tek yönlü işlev icat edilmiştir.

İnternette tanıtım makaleleri bulmak için 'Bob', 'Alice' ve 'Mallory' yi arayın.


Kullanım durumum hakkında yorum yapabilir misiniz? Şifrelemek için özel bir anahtar ve herkesin ve herkesin şifresini çözmesine izin vermek için bir ortak anahtar kullanmak istiyorum.
mmcdole

1
Tüm asimetrik şifrelemenin asal sayılara dayandığı doğru değil, sadece en iyi bilinen örnek (RSA); eliptik eğri kriptografisi gibi başka yöntemler de vardır.
Michael Borgwardt

"Mesaj şifrelenir, ardından alıcının genel anahtarı kullanılarak şifrelenir." Bu cümlenin bir anlamı yok, ya da en azından daha fazla açıklamaya ihtiyacı var. "şifreli sonra şifreli" ???
Maarten Bodewes

Trent'i unuttun! :)
Dojo

1

Bu soruyu, sorgulayanların niyet ettiği çözümü yazılım lisanslama için kullanmaktı içerikte cevaplarken, gereksinimler şunlardır:

  1. Hiçbir üçüncü taraf, uygulamanın ayrıştırılmasıyla lisans anahtarı üretemez
  2. Yazılım anahtarının içeriğinin güvenli olması gerekmez
  3. Yazılım anahtarı insan tarafından okunamıyor

Dijital İmza, bu sorunu, anahtarı yapan ham veriler, insan tarafından okunamayan, ancak tersine mühendislik uygulandığında çözülebilen özel bir anahtarla imzalanabildiği için bu sorunu çözecektir. Ancak özel anahtar güvenlidir, yani kimse yazılımınız için lisans yapamaz (bu nokta).

Yetenekli bir kişinin ürününüzdeki yazılım kilitlerini kaldırmasını engelleyemeyeceğinizi unutmayın. Yani eğer yayınlanan her sürümü kesmek zorundalarsa. Ancak, ürününüz için tüm sürümler için paylaşılabilecek yeni anahtarlar üretmelerini gerçekten istemiyorsunuz.

Python PyNaCl belgelerinde bu amaca uygun 'Dijital İmza' örneği vardır. http://pynacl.readthedocs.org/en/latest/signing/

ve C örneklerine NaCl projesinin nedenleri

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.