Günümüz teknololojisi ilerledikçe bazı güvenlik politikalarınıda izlememiz kaçınılmaz olacaktır.Bunlardan en önemlilerinden biride şifreleme ve ortam güvenliği sağlamaktır .Net güvenliği üzerinde bize bu güvenlik prosedürünü uygulayabileceğimiz ortam ve kodlama masası yaratılmaktadır.Daha önceki makalemde CLR ın sağladığı güvenlik prosedürleri ile uzun bir yazı dizisine başlamıştık.Bugünde .Net güvenliğine devam edeceğiz ve Kriptografi konusuna giriş yapacağız.
Kriptografi belli başlı şifreleme algoritmaları üzerine oturtulmuştur.Baktığımız zaman üç ayrı şifreleme algoritması olduğunu görüyoruz.
1)Simetrik Algoritma
2)Asimetrik Algoritma
3)Hash Algoritması dır.
Şimdi bunlara açıklamaları,namespaceleri ve bu algoritmalar üzerinde .net security ortamındaki şifreleme methodlarıyla giriş yapalım.
1)Simetrik Algoritma(Private-Key):
Basit şifreleme methodlarının mantığına oturtulmuş bir algoritmadır.Bilinen eski methotdur diyebiliriz.Julius Sezar döneminden beri kullanılır.Şöyleki verinin şifrelenmesinde de şifrelendikten sonra açılmasındada aynı anahtarı gerektiren bir kodlama yapısı vardır.Yane Simetrik olarak şifrelenmiş bir dosyayı açabilmeniz için aynı anahtara sahip olabilmeniz gerekmektedir.Klasik bir method olduğu gibi güvenliği son derece max. Tutan bir methodtur..Net ortamında baktığımız zaman System.Security.Cryptography namespace ile kullanılır.
Sözdizimi
C#
ComVisibleAttribute(true)]
public abstract class SymmetricAlgorithm : IDisposable şeklindedir.
VB
MustInherit Class SymmetricAlgorithm _
Implements IDisposable
System.Object hiyerarşisi altında;
AES,DES,RC2,Rijndael,TripleDES
şifreleme methodları simetrik algoritma düzeni ile oluşturulmuş ve .net in bize sunduğu yordamlardır.
System.Security.Cryptography.SymmetricAlgorithmSystem.Security.Cryptography.Aes System.Security.Cryptography.DES System.Security.Cryptography.RC2 System.Security.Cryptography.Rijndael System.Security.Cryptography.TripleDES
Şeklindedir.
Simetrik algoritmaya örnek olarak Rijndael yordamıyla bir örnek kod a bakalım.
private static void EncryptData(String inName, String outName, byte[] rijnKey, byte[] rijnIV)
{
//Giriş ve çıkış dosyalarımızı filestream altında tanımladık ve okuttuk.
FileStream fin = new FileStream(inName, FileMode.Open, FileAccess.Read);
FileStream fout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write);
fout.SetLength(0);
byte[] bin = new byte[100];
long rdlen = 0;
long totlen = fin.Length;
int len;
SymmetricAlgorithm rijn = SymmetricAlgorithm.Create(); //methodu yaratmaya başlıyoruz
CryptoStream encStream = new CryptoStream(fout, rijn.CreateEncryptor(rijnKey, rijnIV), CryptoStreamMode.Write);
Console.WriteLine("Encrypting...");
while (rdlen < totlen)
{
len = fin.Read(bin, 0, 100);
encStream.Write(bin, 0, len);
rdlen = rdlen + len;
Console.WriteLine("{0} bytes processed", rdlen);
}
encStream.Close();
fout.Close();
fin.Close();
}
Kodlamayı örnek amacıyla verdim.
Şu an anlatmak istediğim şey algoritma türleri ve kullanım biçimleridir.Kodlama karmaşık gelebilir.Ancak kodlama bölümüne daha sonraki makalelerde algoritmaları tek tek ele alacağım zaman gireceğim.
2)Asimetrik Algoritma(Public-Key):
Asimetrik algoritmada simetrik algoritmadan farklıdır.Şifreleyen ve çözen anahtar farklıdır.
A ile şifrelenen sadece B ile çözülebilir.
Son 40 yıl içerisinde gelişmiştir ve en önemli örneği RSA dır.
Asimetrik algoritmaya diğer bir değişle açık anahtarlı algoritmada diyebiliriz.
.Net ortamında baktığımız zaman System.Security.Cryptography namespace ile kullanılır.
Sözdizimi
C#
[ComVisibleAttribute(true)]
public abstract class AsymmetricAlgorithm : IDisposable
VB
<ComVisibleAttribute(True)> _
Public MustInherit Class AsymmetricAlgorithm _
Implements IDisposable
System.Object hiyerarşisi altında;
DSA,RSA,ECDsa,ECDiffieHellman
şifreleme methodları asimetrik algoritma düzeni ile oluşturulmuş ve .net in bize sunduğu yordamlardır.
System.Security.Cryptography.AsymmetricAlgorithm
System.Security.Cryptography.DSA System.Security.Cryptography.RSA System.Security.Cryptography.ECDsa System.Security.Cryptography.ECDiffieHellman
Kullanım yordamlarındandır.
Kod bloklarında bakacak olursak;
C#
using System.Security.Cryptography;
using System.Reflection;
[assembly: AssemblyKeyFile("CustomCrypto.snk")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: CLSCompliant(true)]
namespace Contoso
public class CustomCrypto :
System.Security.Cryptography.AsymmetricAlgorithm
{
private CspParameters cspParameters;
private readonly KeySizes[] keySizes = {new KeySizes(8, 64, 8)};
public CustomCrypto()
{
this.KeySize = 8;
}
………………..
…………
……..
…
VB
Imports System.Security.Cryptography
Imports System.Reflection
<Assembly: AssemblyKeyFile("CustomCrypto.snk")>
<Assembly: AssemblyVersion("1.0.0.0")>
<Assembly: CLSCompliant(True)>
Namespace Contoso
Class vbCustomCrypto
Inherits System.Security.Cryptography.AsymmetricAlgorithm
Private cspParameters As CspParameters
Private ReadOnly keySizes() As keySizes = {New keySizes(8, 64, 8)}
Public Sub New()
Me.KeySize = 8
End Sub
……………………..……………..………..….. .
Şeklinde tanımlanıp kullanılır ve uygulama içerisine yerleştirilir.
3)Hash Algoritması :
Ben hash algoritması için şifrelenmiş şifre demek istiyorum.
Çünkü güvenliğimiz açısından sisteme gönderilen
şifreyi otomatik olarak kendi sistemi içinde şifreler.
Hash algoritmasının içerisinde hash fonksiyonları verileri
tek yönlü ve çift düze şifreler.
Yane istediğimiz uzunlukta belirleyebiliriz.
Diğer algoritmalar gibi security.cryptography namespace i ile kullanılır.
Syntax ına bakacak olursak.
VB
<ComVisibleAttribute(True)> _
Public MustInherit Class HashAlgorithm _
Implements ICryptoTransform, IDisposable
C#
[ComVisibleAttribute(true)]
public abstract class HashAlgorithm : ICryptoTransform,
IDisposable
Bize sunduğu 7 algoritma vardır.MD5,SHA1,SHA254,SHA384,SHA512,RIPEMD160,KeyedHashAlgorithm…
Şimdi bunların 2 farklı dilde kod bloklarına bakalım.
VB
Dim sha As New SHA1CryptoServiceProvider()
Dim result As Byte() = sha.ComputeHash(dataArray)
C#
HashAlgorithm sha = new SHA1CryptoServiceProvider();
byte[] result = sha.ComputeHash(dataArray);
………………………
Bahsedeceklerim bukadar..Net ortamının bize sağladığı güvenlik platformunu bir kez daha görmüş olduk.