BB84 Protokolü: Kuantum Şifrelemenin Temelleri, Güvenliği ve Saldırı Yöntemleri
Kuantum şifreleme, veri güvenliğini kuantum fiziği prensiplerine dayandırarak sağlayan bir şifreleme yöntemidir. Klasik şifreleme protokollerine kıyasla, kuantum şifreleme, kuantum bilgisayarların gelişimi ile ortaya çıkan güvenlik zafiyetlerine karşı daha dayanıklıdır. BB84 protokolü ise kuantum anahtar dağıtımı (QKD) için geliştirilen ilk protokollerden biridir ve Alice (gönderen) ile Bob (alıcı) arasında güvenli bir anahtar alışverişi sağlar. Bu makalede, BB84 protokolünün nasıl çalıştığını, güvenlik özelliklerini ve olası saldırı yöntemlerini inceleyeceğiz.
BB84 Protokolü Nedir?
BB84 protokolü, 1984 yılında Charles Bennett ve Gilles Brassard tarafından geliştirilen bir kuantum anahtar dağıtım protokolüdür. Bu protokol, Alice ve Bob’un güvenli bir şekilde ortak bir şifreleme anahtarı oluşturmasını sağlar. Anahtar dağıtımı sırasında kuantum fiziğinin temellerine dayanarak üçüncü bir kişinin (Eve olarak adlandırılır) iletişimi gizlice dinlemesi veya anahtarları ele geçirmesi engellenir.
Nasıl Çalışır?
BB84 protokolü, rastgele bit dizileri ve iki farklı baz kullanılarak çalışır. İşleyişi şu şekildedir:
- Anahtar Üretimi: Alice, belirli bir uzunlukta rastgele bir bit dizisi oluşturur (örneğin
101010...
). Ardından, yine rastgele olarak bazları seçer; örneğin yatay/dikey baz (0 ve 1) ve çapraz baz (45° ve 135°). - Bitlerin Gönderimi: Alice, her bir biti kendi belirlediği baz üzerinden Bob’a gönderir. Bu süreçte qubit adı verilen kuantum parçacıkları (genelde fotonlar) kullanılır.
- Bob’un Ölçüm Yapması: Bob, Alice’ten aldığı bitleri rastgele bazlarla ölçer. Bob’un baz seçimi, Alice’in baz seçimi ile uyumlu değilse ölçüm sonuçları rastgele olur. Baz seçimi uyuştuğunda, Bob doğru sonuçlar elde eder.
- Anahtarın Oluşturulması: Alice ve Bob, kullandıkları bazları karşılaştırır ve bazlarının aynı olduğu ölçüm sonuçlarını bir araya getirerek ortak bir anahtar oluşturur.
Örnek C# Koduyla BB84 Protokolü Simülasyonu
Aşağıda, BB84 protokolünün temel bir simülasyonunu gerçekleştiren C# kodunu bulabilirsiniz:
using System;
class QuantumEncryption
{
static void Main()
{
int keyLength = 16;
bool[] aliceBits = GenerateRandomBits(keyLength);
bool[] aliceBases = GenerateRandomBits(keyLength);
bool[] bobBases = GenerateRandomBits(keyLength);
bool[] bobResults = new bool[keyLength];
for (int i = 0; i < keyLength; i++)
{
if (aliceBases[i] == bobBases[i])
{
bobResults[i] = aliceBits[i];
}
else
{
bobResults[i] = GenerateRandomBit();
}
}
Console.WriteLine("Ortak Anahtar:");
for (int i = 0; i < keyLength; i++)
{
if (aliceBases[i] == bobBases[i])
{
Console.Write(aliceBits[i] ? "1" : "0");
}
}
}
static bool[] GenerateRandomBits(int length)
{
var random = new Random();
bool[] bits = new bool[length];
for (int i = 0; i < length; i++)
{
bits[i] = random.Next(0, 2) == 1;
}
return bits;
}
static bool GenerateRandomBit()
{
var random = new Random();
return random.Next(0, 2) == 1;
}
}
Bu simülasyon ile Alice ve Bob, doğru bazlarla eşleşen bitleri seçerek ortak bir anahtar oluşturur.
BB84 Protokolünde Şifreleme ve Şifre Çözme
BB84 protokolü doğrudan şifreleme yapmaz; yalnızca güvenli bir anahtar oluşturur. Bu ortak anahtar, klasik bir şifreleme algoritmasında (örneğin AES) kullanılarak veri şifreleme ve çözme için kullanılabilir.
Aşağıda, BB84 ile üretilen anahtarı kullanarak AES şifrelemesi ve çözmesini gösteren C# kodu verilmiştir:
using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;
class QuantumEncryptionWithAES
{
static void Main()
{
int keyLength = 16;
bool[] aliceBits = GenerateRandomBits(keyLength);
bool[] aliceBases = GenerateRandomBits(keyLength);
bool[] bobBases = GenerateRandomBits(keyLength);
bool[] bobResults = new bool[keyLength];
for (int i = 0; i < keyLength; i++)
{
bobResults[i] = aliceBases[i] == bobBases[i] ? aliceBits[i] : GenerateRandomBit();
}
byte[] keyBytes = new byte[keyLength];
for (int i = 0; i < keyLength; i++)
{
if (aliceBases[i] == bobBases[i])
{
keyBytes[i] = aliceBits[i] ? (byte)1 : (byte)0;
}
}
string key = Convert.ToBase64String(keyBytes);
Console.WriteLine("Ortak Anahtar (AES için): " + key);
string plainText = "Gizli Mesaj";
string encryptedText = Encrypt(plainText, key);
Console.WriteLine("Şifrelenmiş Metin: " + encryptedText);
string decryptedText = Decrypt(encryptedText, key);
Console.WriteLine("Çözülmüş Metin: " + decryptedText);
}
static string Encrypt(string plainText, string key)
{
byte[] keyBytes = Encoding.UTF8.GetBytes(key.Substring(0, 16));
using (Aes aesAlg = Aes.Create())
{
aesAlg.Key = keyBytes;
aesAlg.Mode = CipherMode.CBC;
aesAlg.Padding = PaddingMode.PKCS7;
aesAlg.GenerateIV();
byte[] iv = aesAlg.IV;
using (var encryptor = aesAlg.CreateEncryptor(aesAlg.Key, iv))
using (var msEncrypt = new MemoryStream())
{
msEncrypt.Write(iv, 0, iv.Length);
using (var csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
using (var swEncrypt = new StreamWriter(csEncrypt))
{
swEncrypt.Write(plainText);
}
return Convert.ToBase64String(msEncrypt.ToArray());
}
}
}
static string Decrypt(string cipherText, string key)
{
byte[] fullCipher = Convert.FromBase64String(cipherText);
byte[] iv = new byte[16];
byte[] cipherBytes = new byte[fullCipher.Length - iv.Length];
Array.Copy(fullCipher, iv, iv.Length);
Array.Copy(fullCipher, iv.Length, cipherBytes, 0, cipherBytes.Length);
byte[] keyBytes = Encoding.UTF8.GetBytes(key.Substring(0, 16));
using (Aes aesAlg = Aes.Create())
{
aesAlg.Key = keyBytes;
aesAlg.IV = iv;
aesAlg.Mode = CipherMode.CBC;
aesAlg.Padding = PaddingMode.PKCS7;
using (var decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV))
using (var msDecrypt = new MemoryStream(cipherBytes))
using (var csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
using (var srDecrypt = new StreamReader(csDecrypt))
{
return srDecrypt.ReadToEnd();
}
}
}
}
Bu örnekte, BB84 ile üretilen anahtarı kullanarak AES algoritmasıyla veriyi şifreleyip çözmüş oluyoruz.
BB84 Protokolüne Yönelik Olası Saldırılar
BB84 teorik olarak kuantum mekaniğinin güvenlik avantajlarından yararlanır; ancak uygulama seviyesinde bazı saldırılara maruz kalabilir:
- Intercept-Resend Attack: Eve, Alice’in gönderdiği bitleri ölçerek Bob’a iletir, ancak baz uyuşmazlığı nedeniyle bu saldırı sonucu hata oranı artar ve Alice ile Bob dinlendiğini anlayabilir.
- Yan Kanal Saldırıları: Gerçek cihazlar üzerinden gelen enerji tüketimi, sinyal süresi gibi yan kanallar güvenlik riski oluşturabilir.
- Çift Foton Saldırıları: Alice çoklu foton gönderirse, Eve bunlardan birini çalabilir. Tek foton kaynakları bu durumu önleyebilir.
- Quantum Computing ile BB84’ü Kırma: Kuantum bilgisayarlar RSA veya ECC gibi klasik algoritmalara karşı etkilidir, ancak BB84’ün temel ilkelerine saldırmak için kullanılamaz.
Sonuç
BB84 protokolü, kuantum şifrelemenin temel yapı taşlarından biridir ve güvenli anahtar dağıtımı sağlar. Kuantum bilişimle kırılması zor olsa da yan kanal saldırıları gibi uygulama seviyesinde dikkat edilmesi gereken riskler vardır.