Şifreleme HizmetleriCryptographic Services

Internet gibi genel ağlar, varlıklar arasında güvenli bir iletişim yöntemi sağlamaz.Public networks such as the Internet do not provide a means of secure communication between entities. Bu tür ağlarla iletişim, yetkisiz üçüncü taraflar tarafından okunmakta ve hatta değiştirilmezler.Communication over such networks is susceptible to being read or even modified by unauthorized third parties. Şifreleme, verilerin görüntülenmesini önlemeye yardımcı olur, verilerin değiştirilip değiştirilmediğini algılamaya yönelik yollar sağlar ve aksi takdirde güvenli olmayan kanallar üzerinden güvenli bir iletişim sağlanmasına yardımcı olur.Cryptography helps protect data from being viewed, provides ways to detect whether data has been modified, and helps provide a secure means of communication over otherwise nonsecure channels. Örneğin, veriler bir şifreleme algoritması kullanılarak şifrelenebilir, şifreli bir durumda iletilir ve daha sonra hedeflenen tarafın şifresini çözülür.For example, data can be encrypted by using a cryptographic algorithm, transmitted in an encrypted state, and later decrypted by the intended party. Üçüncü bir taraf şifrelenmiş verileri karşılar, şifre çöz zor olur.If a third party intercepts the encrypted data, it will be difficult to decipher.

.NET ' te, System.Security.Cryptography ad alanındaki sınıflar sizin için şifreleme ayrıntılarının çoğunu yönetir.In .NET, the classes in the System.Security.Cryptography namespace manage many details of cryptography for you. Bazıları yalnızca işletim sistemi uygulamaları için sarmalayıcılardır, diğerleri ise yalnızca yönetilen uygulamalardır.Some are wrappers for operating system implementations, while others are purely managed implementations. Bu sınıfları kullanmak için şifrede uzman olmanız gerekmez.You do not need to be an expert in cryptography to use these classes. Şifreleme algoritması sınıflarından birinin yeni bir örneğini oluşturduğunuzda, anahtarlar kullanım kolaylığı için otomatik olarak oluşturulur ve varsayılan özellikler mümkün olduğunca güvenli ve güvenlidir.When you create a new instance of one of the encryption algorithm classes, keys are autogenerated for ease of use, and default properties are as safe and secure as possible.

Bu genel bakış, ClickOnce bildirimleri de dahil olmak üzere .NET tarafından desteklenen şifreleme yöntemleri ve uygulamaları Özeti sağlar.This overview provides a synopsis of the encryption methods and practices supported by .NET, including the ClickOnce manifests.

Şifreleme temelleriCryptographic Primitives

Şifrelemenin kullanıldığı tipik bir durumda, iki taraf (Gamze ve Bob) güvenli olmayan bir kanaldan iletişim kurar.In a typical situation where cryptography is used, two parties (Alice and Bob) communicate over a nonsecure channel. Gamze ve Bob, iletişiminin dinlenebilir herkes tarafından erişilebilir olmasını sağlamak istiyor.Alice and Bob want to ensure that their communication remains incomprehensible by anyone who might be listening. Ayrıca, Gamze ve Bob uzak konumlarda olduğundan, Gamze 'den aldığı bilgilerin iletim sırasında herhangi bir kişi tarafından değiştirilmediğinden emin olmalıdır.Furthermore, because Alice and Bob are in remote locations, Alice must make sure that the information she receives from Bob has not been modified by anyone during transmission. Ayrıca, bilgilerin gerçekten Bob 'dan geldiğinden ve Bob 'u taklit eden birisinden kaynaklanmadığından emin olması gerekir.In addition, she must make sure that the information really does originate from Bob and not from someone who is impersonating Bob.

Şifreleme, aşağıdaki hedeflere ulaşmak için kullanılır:Cryptography is used to achieve the following goals:

  • Gizlilik: bir kullanıcının kimliğini veya verilerinin okunmasını sağlamaya yardımcı olmak Için.Confidentiality: To help protect a user's identity or data from being read.

  • Veri bütünlüğü: verilerin değiştirilmesini korumanıza yardımcı olmak Için.Data integrity: To help protect data from being changed.

  • Kimlik doğrulaması: verilerin belirli bir taraftan kaynaklanmadığını doğrulamak Için.Authentication: To ensure that data originates from a particular party.

  • Red olmayan: belirli bir tarafın bir ileti gönderdiğini reddetmekten kaçınmak Için.Non-repudiation: To prevent a particular party from denying that they sent a message.

Bu hedeflere ulaşmak için şifreleme düzeni oluşturmak üzere şifreleme temel işlemleri olarak bilinen algoritmaların ve uygulamaların bir bileşimini kullanabilirsiniz.To achieve these goals, you can use a combination of algorithms and practices known as cryptographic primitives to create a cryptographic scheme. Aşağıdaki tabloda şifreleme temelleri ve kullanımları listelenmektedir.The following table lists the cryptographic primitives and their uses.

Şifreleme temelCryptographic primitive KullanınUse
Gizli anahtar şifreleme (simetrik şifreleme)Secret-key encryption (symmetric cryptography) Verilerin üçüncü taraflar tarafından okunmasını önlemek için bir dönüştürme gerçekleştirir.Performs a transformation on data to keep it from being read by third parties. Bu tür bir şifreleme, verileri şifrelemek ve şifrelerini çözmek için tek bir paylaşılan gizli anahtar kullanır.This type of encryption uses a single shared, secret key to encrypt and decrypt data.
Ortak anahtar şifrelemesi (asimetrik şifreleme)Public-key encryption (asymmetric cryptography) Verilerin üçüncü taraflar tarafından okunmasını önlemek için bir dönüştürme gerçekleştirir.Performs a transformation on data to keep it from being read by third parties. Bu tür bir şifreleme, verileri şifrelemek ve şifrelerini çözmek için ortak/özel anahtar çifti kullanır.This type of encryption uses a public/private key pair to encrypt and decrypt data.
Şifreleme imzalamaCryptographic signing Bu tarafa özgü bir dijital imza oluşturarak verilerin belirli bir taraftan kaynaklandığını doğrulamaya yardımcı olur.Helps verify that data originates from a specific party by creating a digital signature that is unique to that party. Bu işlem karma işlevleri de kullanır.This process also uses hash functions.
Şifreleme karmalarıCryptographic hashes Herhangi bir uzunluktaki verileri sabit uzunluklu bir bayt dizisine eşler.Maps data from any length to a fixed-length byte sequence. Karmalar istatistiksel olarak benzersizdir; farklı bir iki baytlık dizi aynı değere karma olmayacak.Hashes are statistically unique; a different two-byte sequence will not hash to the same value.

Secret-Key şifrelemeSecret-Key Encryption

Gizli anahtar şifreleme algoritmaları, verileri şifrelemek ve şifrelerini çözmek için tek bir gizli anahtar kullanır.Secret-key encryption algorithms use a single secret key to encrypt and decrypt data. Anahtara sahip olan herhangi bir taraf verilerinizin şifresini çözmek ya da kendi verilerini şifrelemek veya kendi verilerini şifrelemek için bu anahtarı kullanabilir.You must secure the key from access by unauthorized agents, because any party that has the key can use it to decrypt your data or encrypt their own data, claiming it originated from you.

Şifreleme ve şifre çözme için aynı anahtar kullanıldığından, gizli anahtar şifrelemesi de simetrik şifreleme olarak adlandırılır.Secret-key encryption is also referred to as symmetric encryption because the same key is used for encryption and decryption. Gizli anahtar şifreleme algoritmaları çok hızlıdır (ortak anahtar algoritmalarıyla karşılaştırılır) ve büyük veri akışlarında şifreleme dönüştürmeleri gerçekleştirmek için uygundur.Secret-key encryption algorithms are very fast (compared with public-key algorithms) and are well suited for performing cryptographic transformations on large streams of data. RSA gibi asimetrik şifreleme algoritmaları, şifreleyebilecekleri veri miktarına göre sınırlı matematiksel olarak sınırlanmıştır.Asymmetric encryption algorithms such as RSA are limited mathematically in how much data they can encrypt. Simetrik şifreleme algoritmaları genellikle bu sorunlara sahip değildir.Symmetric encryption algorithms do not generally have those problems.

Tek seferde bir veri bloğunu şifrelemek için bir blok şifresi olarak adlandırılan bir gizli anahtar algoritması türü kullanılır.A type of secret-key algorithm called a block cipher is used to encrypt one block of data at a time. Veri şifreleme standardı (DES), TripleDES ve Gelişmiş Şifreleme Standardı (AES) gibi şifrelemeleri blok olarak, n baytlık bir giriş bloğunu şifreli baytların çıkış bloğuna dönüştürür.Block ciphers such as Data Encryption Standard (DES), TripleDES, and Advanced Encryption Standard (AES) cryptographically transform an input block of n bytes into an output block of encrypted bytes. Bir bayt dizisini şifrelemek veya şifresini çözmek istiyorsanız blok olarak blok yapmanız gerekir.If you want to encrypt or decrypt a sequence of bytes, you have to do it block by block. N , des ve TripleDES için 8 bayt; 16 bayt [varsayılan], 24 bayt veya AES için 32 bayt) olduğundan, n 'den büyük veri değerlerinin tek seferde tek bir blok şifrelenebilmesi gerekir.Because n is small (8 bytes for DES and TripleDES; 16 bytes [the default], 24 bytes, or 32 bytes for AES), data values that are larger than n have to be encrypted one block at a time. N ' den küçük veri değerleri işlenmek üzere n olarak genişletilmelidir.Data values that are smaller than n have to be expanded to n in order to be processed.

Bir basit blok şifresi formu elektronik codebook (ECB) modu olarak adlandırılır.One simple form of block cipher is called the electronic codebook (ECB) mode. ECB modu, ilk düz metin bloğunu başlatmak için bir başlatma vektörü kullanmadığı için güvenli olarak kabul edilmez.ECB mode is not considered secure, because it does not use an initialization vector to initialize the first plaintext block. Belirli bir gizli anahtar k anahtarı için, bir başlatma vektörü kullanmayan basit bir blok şifresi, aynı düz metin giriş bloğunu şifreli olmayan aynı çıkış bloğuna şifreler.For a given secret key k, a simple block cipher that does not use an initialization vector will encrypt the same input block of plaintext into the same output block of ciphertext. Bu nedenle, giriş düz metin akışındaki yinelenen bloklarınız varsa, çıktı şifreli metin akışındaki yinelenen bloklara sahip olursunuz.Therefore, if you have duplicate blocks in your input plaintext stream, you will have duplicate blocks in your output ciphertext stream. Bu yinelenen çıktı, yetkisiz kullanıcıların, kullanıma açık olabilecek algoritmaları ve olası saldırı modlarını kullanan zayıf şifrelemeye karşı uyarır.These duplicate output blocks alert unauthorized users to the weak encryption used the algorithms that might have been employed, and the possible modes of attack. Bu nedenle ECB şifre modu Analize ve son olarak anahtar bulmaya açıktır.The ECB cipher mode is therefore quite vulnerable to analysis, and ultimately, key discovery.

Temel sınıf kitaplığında verilen blok şifre sınıfları, şifreleme bloğu zinciri (CBC) adlı varsayılan bir zincirleme modu kullanır, ancak isterseniz bu varsayılan değeri değiştirebilirsiniz.The block cipher classes that are provided in the base class library use a default chaining mode called cipher-block chaining (CBC), although you can change this default if you want.

CBC şifresi, düz metin bloğunu şifrelemek için bir başlatma vektörü (IV) kullanarak ECB şifrelemeleri ile ilişkili sorunları ortadan kaldırmak.CBC ciphers overcome the problems associated with ECB ciphers by using an initialization vector (IV) to encrypt the first block of plaintext. Düz düz metin blokları, şifrelenmeden önce önceki şifreli olmayan bir bit düzeyinde dışlamalı veya ( XOR ) işleme geçer.Each subsequent block of plaintext undergoes a bitwise exclusive OR (XOR) operation with the previous ciphertext block before it is encrypted. Bu nedenle, her bir şifreli blok, önceki tüm bloklara bağımlıdır.Each ciphertext block is therefore dependent on all previous blocks. Bu sistem kullanıldığında, yetkisiz bir kullanıcı tarafından bilinen ortak ileti üstbilgileri, bir anahtara ters mühendislik uygulamak için kullanılamaz.When this system is used, common message headers that might be known to an unauthorized user cannot be used to reverse-engineer a key.

Bir CBC şifresi ile şifrelenen verileri tehlikeye almanın bir yolu, olası her anahtar için kapsamlı bir arama gerçekleştirmelidir.One way to compromise data that is encrypted with a CBC cipher is to perform an exhaustive search of every possible key. Şifrelemeyi gerçekleştirmek için kullanılan anahtarın boyutuna bağlı olarak, bu tür bir arama en hızlı bilgisayarlar bile çok zaman alır ve bu nedenle uygulanabilir olur.Depending on the size of the key that is used to perform encryption, this kind of search is very time-consuming using even the fastest computers and is therefore infeasible. Daha büyük anahtar boyutlarının şifre daha kolay olması daha zordur.Larger key sizes are more difficult to decipher. Şifreleme, şifreli verileri almak üzere bir saldırgan için teorik olarak olanaksız hale gelse de, bunu yapmanın maliyetini yükseltir.Although encryption does not make it theoretically impossible for an adversary to retrieve the encrypted data, it does raise the cost of doing this. Yalnızca birkaç gün için anlamlı olan verileri almak üzere üç ay sürüyorsa, ayrıntılı arama yöntemi pratik değildir.If it takes three months to perform an exhaustive search to retrieve data that is meaningful only for a few days, the exhaustive search method is impractical.

Gizli anahtar şifrelemenin dezavantajı, iki tarafın bir anahtar ve IV üzerinde anlaştığı ve değerlerini iletildiği bir dezavantajdır.The disadvantage of secret-key encryption is that it presumes two parties have agreed on a key and IV, and communicated their values. IV gizli kabul edilmez ve iletiyle birlikte düz metin olarak iletilebilir.The IV is not considered a secret and can be transmitted in plaintext with the message. Ancak, anahtarın yetkisiz kullanıcılardan gizli tutulması gerekir.However, the key must be kept secret from unauthorized users. Bu sorunlar nedeniyle, gizli anahtar şifrelemesi genellikle anahtar ve IV değerlerini özel olarak iletmek için ortak anahtar şifrelemesi ile birlikte kullanılır.Because of these problems, secret-key encryption is often used together with public-key encryption to privately communicate the values of the key and IV.

Gamze ve Bob 'un güvenli olmayan bir kanal üzerinden iletişim kurmak isteyen iki taraf olduğu varsayılırsa, gizli anahtar şifrelemesini şu şekilde kullanabilir: Gamze ve Bob, belirli bir anahtar ve IV ile belirli bir algoritmayı (örneğin, AES) kullanmayı kabul eder.Assuming that Alice and Bob are two parties who want to communicate over a nonsecure channel, they might use secret-key encryption as follows: Alice and Bob agree to use one particular algorithm (AES, for example) with a particular key and IV. Çiğdem bir ileti oluşturur ve iletiyi göndermek için bir ağ akışı (Belki de adlandırılmış kanal veya ağ e-postası) oluşturur.Alice composes a message and creates a network stream (perhaps a named pipe or network email) on which to send the message. Ardından, anahtarı ve IV 'yi kullanarak metni şifreler ve Intranet üzerinden emre 'ye şifreli iletiyi ve IV 'yi gönderir.Next, she encrypts the text using the key and IV, and sends the encrypted message and IV to Bob over the intranet. Bob şifreli metni alır ve IV 'yi kullanarak ve daha önce anahtar üzerinde anlaşarak şifresini çözer.Bob receives the encrypted text and decrypts it by using the IV and previously agreed upon key. İletim yakalandıktan sonra, bu anahtarı bilmez çünkü bu, anahtarı bilmez.If the transmission is intercepted, the interceptor cannot recover the original message, because they do not know the key. Bu senaryoda, yalnızca anahtarın gizli kalması gerekir.In this scenario, only the key must remain secret. Gerçek bir Dünya senaryosunda, Gamze veya Bob bir gizli anahtar oluşturur ve gizli (simetrik) anahtarı diğer tarafa aktarmak için ortak anahtar (asimetrik) şifrelemeyi kullanır.In a real world scenario, either Alice or Bob generates a secret key and uses public-key (asymmetric) encryption to transfer the secret (symmetric) key to the other party. Ortak anahtar şifreleme hakkında daha fazla bilgi için sonraki bölüme bakın.For more information about public-key encryption, see the next section.

.NET, gizli anahtar şifreleme algoritmaları uygulayan aşağıdaki sınıfları sağlar:.NET provides the following classes that implement secret-key encryption algorithms:

  • Aes

  • HMACSHA256, HMACSHA384 ve HMACSHA512 .HMACSHA256, HMACSHA384 and HMACSHA512. (Bu teknik açıdan gizli anahtar algoritmalarda, gizli anahtar ile Birleşik bir şifreleme karması işlevi kullanılarak hesaplanan ileti kimlik doğrulama kodları temsil etmektedir.(These are technically secret-key algorithms because they represent message authentication codes that are calculated by using a cryptographic hash function combined with a secret key. Bu makalenin ilerleyen kısımlarında bulunan karma değerleribölümüne bakın.)See Hash Values, later in this article.)

Public-Key şifrelemePublic-Key Encryption

Ortak anahtar şifrelemesi, yetkisiz kullanıcılardan ve herkese açık hale getirilen bir ortak anahtardan gizli tutulması gereken özel bir anahtar kullanır.Public-key encryption uses a private key that must be kept secret from unauthorized users and a public key that can be made public to anyone. Ortak anahtar ve özel anahtar, matematiksel olarak bağlanır; ortak anahtarla şifrelenen verilerin şifresi yalnızca özel anahtarla çözülebilecek ve özel anahtarla imzalanmış veriler yalnızca ortak anahtarla doğrulanabilir.The public key and the private key are mathematically linked; data that is encrypted with the public key can be decrypted only with the private key, and data that is signed with the private key can be verified only with the public key. Ortak anahtar herkes tarafından kullanılabilir hale getirilebilir; Bu, özel anahtarın adına gönderilecek verileri şifrelemek için kullanılır.The public key can be made available to anyone; it is used for encrypting data to be sent to the keeper of the private key. Verileri şifrelemek için bir anahtar gerekli olduğundan ve verilerin şifresini çözmek için başka bir anahtar gerektiğinden, ortak anahtar şifreleme algoritmaları Asimetrik algoritmalar olarak da bilinir.Public-key cryptographic algorithms are also known as asymmetric algorithms because one key is required to encrypt data, and another key is required to decrypt data. Temel bir şifreleme kuralı, anahtar yeniden kullanımını yasaklar ve her iki anahtar da her iletişim oturumu için benzersiz olmalıdır.A basic cryptographic rule prohibits key reuse, and both keys should be unique for each communication session. Ancak, pratikte asimetrik anahtarlar genellikle uzun ömürlü.However, in practice, asymmetric keys are generally long-lived.

İki taraf (Gamze ve Bob) ortak anahtar şifrelemeyi şu şekilde kullanabilir: Ilk olarak, Gamze ortak/özel anahtar çifti oluşturur.Two parties (Alice and Bob) might use public-key encryption as follows: First, Alice generates a public/private key pair. Bob, Gamze 'yi şifreli bir ileti göndermek isterse kendi ortak anahtarını ister.If Bob wants to send Alice an encrypted message, he asks her for her public key. Gamze, Bob 'un ortak anahtarını güvenli olmayan bir ağ üzerinden gönderir ve Bob bu anahtarı bir iletiyi şifrelemek için kullanır.Alice sends Bob her public key over a nonsecure network, and Bob uses this key to encrypt a message. Bob, şifreli iletiyi çiğdem 'e gönderir ve özel anahtarını kullanarak onun şifresini çözer.Bob sends the encrypted message to Alice, and she decrypts it by using her private key. Bob, bir genel ağ gibi güvenli olmayan bir kanal üzerinden gamze 'nin anahtarını aldıysa, Bob bir ortadaki adam saldırısında açıktır.If Bob received Alice's key over a nonsecure channel, such as a public network, Bob is open to a man-in-the-middle attack. Bu nedenle, Bob 'un ortak anahtarının doğru bir kopyasına sahip olduğu çiğdem ile doğrulanması gerekir.Therefore, Bob must verify with Alice that he has a correct copy of her public key.

Çiğdem 'in ortak anahtarının iletimi sırasında, yetkisiz bir aracı anahtarı engelleyebilir.During the transmission of Alice's public key, an unauthorized agent might intercept the key. Ayrıca, aynı aracı Bob 'dan şifrelenmiş iletiyi de engelleyebilir.Furthermore, the same agent might intercept the encrypted message from Bob. Ancak, aracı iletinin şifresini ortak anahtarla çözemez.However, the agent cannot decrypt the message with the public key. İleti, yalnızca gamze 'nin gönderilmemiş özel anahtarıyla şifresi çözülür.The message can be decrypted only with Alice's private key, which has not been transmitted. Çiğdem, ortak anahtara sahip herkes iletinin şifresini çözebileceğinden, can 'a bir yanıt iletisi şifrelemek için özel anahtarını kullanmaz.Alice does not use her private key to encrypt a reply message to Bob, because anyone with the public key could decrypt the message. Gamze, emre 'ye bir ileti göndermek isterse, emre 'yi ortak anahtarı için sorar ve iletiyi bu ortak anahtarı kullanarak şifreler.If Alice wants to send a message back to Bob, she asks Bob for his public key and encrypts her message using that public key. Bob, ilişkili özel anahtarını kullanarak iletinin şifresini çözer.Bob then decrypts the message using his associated private key.

Bu senaryoda, Gamze ve Bob bir gizli anahtar (simetrik) anahtar aktarmak ve oturumunun geri kalanı için gizli anahtar şifrelemeyi kullanmak için ortak anahtar (asimetrik) şifrelemeyi kullanır.In this scenario, Alice and Bob use public-key (asymmetric) encryption to transfer a secret (symmetric) key and use secret-key encryption for the remainder of their session.

Aşağıdaki listede, ortak anahtar ve gizli anahtar şifreleme algoritmaları arasında karşılaştırmalar sunulmaktadır:The following list offers comparisons between public-key and secret-key cryptographic algorithms:

  • Ortak anahtar şifreleme algoritmaları sabit bir arabellek boyutu kullanır, ancak gizli anahtar şifreleme algoritmaları değişken uzunlukta bir arabellek kullanır.Public-key cryptographic algorithms use a fixed buffer size, whereas secret-key cryptographic algorithms use a variable-length buffer.

  • Ortak anahtar algoritmaları, gizli anahtar algoritmalarının yanı sıra yalnızca küçük miktarlarda veri şifrelenebilmesi nedeniyle verileri akışlara eklemek için kullanılamaz.Public-key algorithms cannot be used to chain data together into streams the way secret-key algorithms can, because only small amounts of data can be encrypted. Bu nedenle, asimetrik işlemler simetrik işlemler ile aynı akış modelini kullanmaz.Therefore, asymmetric operations do not use the same streaming model as symmetric operations.

  • Ortak anahtar şifrelemesi, gizli anahtar şifrelemeden daha büyük bir anahtar alanı (anahtar için olası değerler aralığı) sahiptir.Public-key encryption has a much larger keyspace (range of possible values for the key) than secret-key encryption. Bu nedenle, ortak anahtar şifrelemesi, olası her anahtarı deneyen kapsamlı saldırılara karşı daha düşüktür.Therefore, public-key encryption is less susceptible to exhaustive attacks that try every possible key.

  • Ortak anahtarların dağıtılması, bu kişilerin güvenli olması gerekmez, çünkü gönderenin kimliğini doğrulamak için bir başka yol vardır.Public keys are easy to distribute because they do not have to be secured, provided that some way exists to verify the identity of the sender.

  • Bazı ortak anahtar algoritmaları (RSA ve DSA gibi), veri göndericisinin kimliğini doğrulamak için dijital imzalar oluşturmak üzere kullanılabilir.Some public-key algorithms (such as RSA and DSA, but not Diffie-Hellman) can be used to create digital signatures to verify the identity of the sender of data.

  • Ortak anahtar algoritmaları gizli anahtar algoritmalarıyla karşılaştırıldığında çok yavaştır ve büyük miktarlarda verileri şifrelemek üzere tasarlanmamıştır.Public-key algorithms are very slow compared with secret-key algorithms, and are not designed to encrypt large amounts of data. Ortak anahtar algoritmaları yalnızca çok az miktardaki verileri aktarmak için yararlıdır.Public-key algorithms are useful only for transferring very small amounts of data. Genellikle ortak anahtar şifrelemesi, bir anahtarı ve IV 'yi bir gizli anahtar algoritması tarafından kullanılmak üzere şifrelemek için kullanılır.Typically, public-key encryption is used to encrypt a key and IV to be used by a secret-key algorithm. Anahtar ve IV aktarıldıktan sonra, oturumun geri kalanı için gizli anahtar şifreleme kullanılır.After the key and IV are transferred, secret-key encryption is used for the remainder of the session.

.NET, ortak anahtar algoritmaları uygulayan aşağıdaki sınıfları sağlar:.NET provides the following classes that implement public-key algorithms:

RSA hem şifrelemeye hem de imzalamaya izin verir, ancak DSA yalnızca imzalama için kullanılabilir.RSA allows both encryption and signing, but DSA can be used only for signing. DSA, RSA olarak güvenli değildir ve RSA önerilir.DSA is not as secure as RSA, and we recommend RSA. Diffie-Hellman yalnızca anahtar üretimi için kullanılabilir.Diffie-Hellman can be used only for key generation. Genel olarak, ortak anahtar algoritmaları, kullanımları özel anahtar algoritmalarından daha sınırlıdır.In general, public-key algorithms are more limited in their uses than private-key algorithms.

Dijital İmzalarDigital Signatures

Ortak anahtar algoritmaları, dijital imzaları biçimlendirmek için de kullanılabilir.Public-key algorithms can also be used to form digital signatures. Dijital imzalar gönderici kimliğini doğrular (gönderenin ortak anahtarına güveniyorsanız) ve verilerin bütünlüğünü korumaya yardımcı olur.Digital signatures authenticate the identity of a sender (if you trust the sender's public key) and help protect the integrity of data. Gamze tarafından oluşturulan bir ortak anahtar kullanarak, Gamze 'nin verilerinin alıcısı, dijital imzayı gamze 'nin verilerine ve Gamze 'nin ortak anahtarına göre karşılaştırarak gamze 'nin gönderdiğini doğrulayabilirler.Using a public key generated by Alice, the recipient of Alice's data can verify that Alice sent it by comparing the digital signature to Alice's data and Alice's public key.

Bir iletiyi dijital olarak imzalamak için ortak anahtar şifrelemeyi kullanmak üzere, bir ileti özeti oluşturmak için önce çiğdem, iletiye bir karma algoritması uygular.To use public-key cryptography to digitally sign a message, Alice first applies a hash algorithm to the message to create a message digest. İleti özeti, verilerin kompakt ve benzersiz bir gösterimidir.The message digest is a compact and unique representation of data. Çiğdem daha sonra kişisel imzasını oluşturmak için özel anahtarıyla birlikte ileti özetini şifreler.Alice then encrypts the message digest with her private key to create her personal signature. Can ileti ve imza alındıktan sonra, ileti özetini kurtarmak için Ayla 'nın ortak anahtarını kullanarak imzanın şifresini çözer ve iletiyi çiğdem 'in kullandığı karma algoritmayı kullanarak karma hale getirir.Upon receiving the message and signature, Bob decrypts the signature using Alice's public key to recover the message digest and hashes the message using the same hash algorithm that Alice used. Bob 'un bir ileti özeti gamze 'den alınan ileti özetine tam olarak eşleşiyorsa, Bob iletinin özel anahtarın bulunduğu yerden veya verilerin değiştirilmediğinden emin olur.If the message digest that Bob computes exactly matches the message digest received from Alice, Bob is assured that the message came from the possessor of the private key and that the data has not been modified. Emre bu çiğdem 'e güveniyorsa, iletinin gamze 'den geldiğini bilir.If Bob trusts that Alice is the possessor of the private key, he knows that the message came from Alice.

Not

Gönderenin ortak anahtarı ortak bilgi olduğundan ve genellikle dijital imza biçiminde yer aldığı için imza, herkes tarafından doğrulanabilir.A signature can be verified by anyone because the sender's public key is common knowledge and is typically included in the digital signature format. Bu yöntem iletinin gizliliğini korumaz; iletinin gizli olması için de şifrelenmelidir.This method does not retain the secrecy of the message; for the message to be secret, it must also be encrypted.

.NET, dijital imza algoritmaları uygulayan aşağıdaki sınıfları sağlar:.NET provides the following classes that implement digital signature algorithms:

Karma değerleriHash Values

Karma algoritmalar rastgele uzunluktaki ikili değerleri, karma değerler olarak bilinen sabit uzunlukta daha küçük ikili değerlerle eşler.Hash algorithms map binary values of an arbitrary length to smaller binary values of a fixed length, known as hash values. Karma değeri, bir veri parçasının sayısal gösterimidir.A hash value is a numerical representation of a piece of data. Düz metin paragrafını ve paragrafın bir harfine eşit bir şekilde karma yaparsanız, sonraki bir karma, farklı bir değer oluşturur.If you hash a paragraph of plaintext and change even one letter of the paragraph, a subsequent hash will produce a different value. Karma şifreli olarak güçlü ise, değeri önemli ölçüde değişir.If the hash is cryptographically strong, its value will change significantly. Örneğin, bir iletinin tek bir biti değiştirilirse, güçlü bir karma işlevi yüzde 50 ' ye göre farklılık gösteren bir çıktı üretebilir.For example, if a single bit of a message is changed, a strong hash function may produce an output that differs by 50 percent. Birçok giriş değeri aynı çıkış değerine karma olabilir.Many input values may hash to the same output value. Ancak, aynı değere karma olarak iki ayrı giriş bulmak için hesaplama yapılabilir.However, it is computationally infeasible to find two distinct inputs that hash to the same value.

İki taraf (Gamze ve Bob) ileti bütünlüğünü sağlamak için bir karma işlevi kullanabilir.Two parties (Alice and Bob) could use a hash function to ensure message integrity. İletileri imzalamak için bir karma algoritması seçer.They would select a hash algorithm to sign their messages. Çiğdem bir ileti yazabilir ve ardından seçilen algoritmayı kullanarak bu iletinin karmasını oluşturur.Alice would write a message, and then create a hash of that message by using the selected algorithm. Bunlar daha sonra aşağıdaki yöntemlerden birini izlemelidir:They would then follow one of the following methods:

  • Çiğdem, can 'a düz metin iletisi ve karma ileti (dijital imza) gönderir.Alice sends the plaintext message and the hashed message (digital signature) to Bob. Bob iletiyi alır ve karma hale getirir ve karma değerini gamze 'den aldığı karma değerle karşılaştırır.Bob receives and hashes the message and compares his hash value to the hash value that he received from Alice. Karma değerleri aynıysa ileti değiştirilmez.If the hash values are identical, the message was not altered. Değerler özdeş değilse, ileti çiğdem tarafından yazıldıktan sonra değiştirilir.If the values are not identical, the message was altered after Alice wrote it.

    Ne yazık ki bu yöntem, gönderenin orijinalliğini oluşturmaz.Unfortunately, this method does not establish the authenticity of the sender. Birisi gamze 'yi taklit edebilir ve emre 'ye bir ileti gönderebilir.Anyone can impersonate Alice and send a message to Bob. İletileri imzalamak için aynı karma algoritmayı kullanabilir ve tüm Bob, iletinin imzasıyla eşleşip eşleşmediğini tespit edebilir.They can use the same hash algorithm to sign their message, and all Bob can determine is that the message matches its signature. Bu, ortadaki adam saldırısının bir biçimidir.This is one form of a man-in-the-middle attack. Daha fazla bilgi için bkz. Yeni nesil şifreleme (CNG) güvenli Iletişim örneği.For more information, see Cryptography Next Generation (CNG) Secure Communication Example.

  • Çiğdem, güvenli olmayan bir genel kanal üzerinden emre 'ye düz metin iletisi gönderir.Alice sends the plaintext message to Bob over a nonsecure public channel. Karma iletiyi güvenli bir özel kanal üzerinden emre 'ye gönderir.She sends the hashed message to Bob over a secure private channel. Bob, düz metin iletisini alır, onu karma hale getirir ve karmayı özel olarak değiştirilen karmayla karşılaştırır.Bob receives the plaintext message, hashes it, and compares the hash to the privately exchanged hash. Karmalar eşleşiyorsa, Bob iki şeyi bilir:If the hashes match, Bob knows two things:

    • İleti değiştirilmedi.The message was not altered.

    • İletiyi gönderen (Gamze), gerçek.The sender of the message (Alice) is authentic.

    Bu sistemin çalışması için Çiğdem, Bob hariç tüm taraflardan orijinal karma değerini gizlemeniz gerekir.For this system to work, Alice must hide her original hash value from all parties except Bob.

  • Çiğdem, düz metin iletisini güvenli olmayan bir genel kanal üzerinden emre 'ye gönderir ve karma iletiyi genel olarak görüntülenebilen bir Web sitesine koyar.Alice sends the plaintext message to Bob over a nonsecure public channel and places the hashed message on her publicly viewable Web site.

    Bu yöntem, herhangi bir kişinin karma değeri değiştirmesini engelleyerek iletiyi izinsiz değişikliklere engel olur.This method prevents message tampering by preventing anyone from modifying the hash value. İleti ve karması herkes tarafından okunabilse de, karma değeri yalnızca gamze tarafından değiştirilebilir.Although the message and its hash can be read by anyone, the hash value can be changed only by Alice. Çiğdem 'i taklit etmek isteyen bir saldırgan, Çiğdem 'in Web sitesine erişim gerektirir.An attacker who wants to impersonate Alice would require access to Alice's Web site.

Önceki yöntemlerin hiçbiri düz metin olarak aktarıldıklarından, birisinin çiğdem iletilerini okumasını engellemez.None of the previous methods will prevent someone from reading Alice's messages, because they are transmitted in plaintext. Tam güvenlik genellikle dijital imzaları (ileti imzalama) ve şifrelemeyi gerektirir.Full security typically requires digital signatures (message signing) and encryption.

.NET, karma algoritmaları uygulayan aşağıdaki sınıfları sağlar:.NET provides the following classes that implement hashing algorithms:

.NET ayrıca MD5 ve sağlar SHA1 ..NET also provides MD5 and SHA1. Ancak MD5 ve SHA-1 algoritmalarının güvenli olmadığı algılandı ve bunun yerine SHA-2 önerilir.But the MD5 and SHA-1 algorithms have been found to be insecure, and SHA-2 is now recommended instead. SHA-2 SHA256, SHA384 ve SHA512 olur içerir.SHA-2 includes SHA256, SHA384, and SHA512.

Rastgele sayı oluşturmaRandom Number Generation

Rastgele sayı oluşturma çok sayıda şifreleme işlemine integral.Random number generation is integral to many cryptographic operations. Örneğin, şifreleme anahtarlarının mümkün olduğunca rastgele olması gerekir, böylece bunları yeniden oluşturmak uygulanabilir hale gelir.For example, cryptographic keys need to be as random as possible so that it is infeasible to reproduce them. Şifreleme rastgele sayı oluşturucuları, bir günden daha iyi bir olasılık ile tahmin edilmesi açısından uygun olmayan çıktıyı üretmelidir.Cryptographic random number generators must generate output that is computationally infeasible to predict with a probability that is better than one half. Bu nedenle, bir sonraki çıkış bitini tahmin etmek için herhangi bir yöntem rastgele tahmin gerçekleştirmemelidir.Therefore, any method of predicting the next output bit must not perform better than random guessing. .NET 'teki sınıflar, şifreleme anahtarları oluşturmak için rastgele sayı oluşturucuları kullanır.The classes in .NET use random number generators to generate cryptographic keys.

RandomNumberGeneratorSınıfı, rastgele sayı Oluşturucu algoritmasının bir uygulamasıdır.The RandomNumberGenerator class is an implementation of a random number generator algorithm.

ClickOnce bildirimleriClickOnce Manifests

Aşağıdaki şifreleme sınıfları ClickOnce teknolojisikullanılarak dağıtılan uygulamalar için bildirim imzaları hakkında bilgi edinmenizi ve doğrulamanıza olanak sağlar:The following cryptography classes let you obtain and verify information about manifest signatures for applications that are deployed using ClickOnce technology:

Ayrıca, aşağıdaki sınıflar belirli imza bilgilerini sağlar:In addition, the following classes provide specific signature information:

Yeni nesil şifreleme (CNG) sınıflarıCryptography Next Generation (CNG) Classes

Yeni nesil şifreleme (CNG) sınıfları, yerel CNG işlevlerinin etrafında yönetilen bir sarmalayıcı sağlar.The Cryptography Next Generation (CNG) classes provide a managed wrapper around the native CNG functions. (CNG, CryptoAPI 'nin yerini alır.) Bu sınıfların adlarının bir parçası olarak "CNG" vardır.(CNG is the replacement for CryptoAPI.) These classes have "Cng" as part of their names. CNG sarmalayıcı sınıflarına merkezi olarak CngKey , CNG anahtarlarının depolanmasını ve kullanımını soyutlayan anahtar kapsayıcı sınıfıdır.Central to the CNG wrapper classes is the CngKey key container class, which abstracts the storage and use of CNG keys. Bu sınıf, bir anahtar çiftini veya ortak anahtarı güvenli bir şekilde depolamanıza ve basit bir dize adı kullanarak buna başvurmanıza olanak sağlar.This class lets you store a key pair or a public key securely and refer to it by using a simple string name. Eliptik Eğri tabanlı ECDsaCng imza sınıfı ve ECDiffieHellmanCng şifreleme sınıfı CngKey nesneleri kullanabilir.The elliptic curve-based ECDsaCng signature class and the ECDiffieHellmanCng encryption class can use CngKey objects.

CngKeySınıfı, anahtarları açma, oluşturma, silme ve dışarı aktarma dahil olmak üzere çeşitli ek işlemler için kullanılır.The CngKey class is used for a variety of additional operations, including opening, creating, deleting, and exporting keys. Ayrıca, yerel işlevleri doğrudan çağırırken kullanılacak temel anahtar tanıtıcısına erişim sağlar.It also provides access to the underlying key handle to use when calling native functions directly.

.NET ayrıca aşağıdakiler gibi çeşitli destek CNG sınıfları içerir:.NET also includes a variety of supporting CNG classes, such as the following:

Ayrıca bkz.See also