İçindekiler
"Denetim kayıtlarımız değiştirilemez" cümlesi ürün sunumlarında sık geçer. Denetçi bu cümleyi duyduğunda sorduğu soru hep aynıdır: nasıl? Bu yazı, o soruya verilebilecek teknik cevabı ve cevabın sınırlarını anlatır.
Değiştirilemez mi, Değişiklik Belli mi?
Önce terimi düzeltmek gerekir. Bir veritabanına yazılan satır, yeterli yetkiye sahip biri tarafından teknik olarak değiştirilebilir. Gerçekçi hedef, değişikliği imkansız kılmak değil, fark edilebilir kılmaktır. Sektörde bunun adı tamper evident, yani kurcalamanın belli olmasıdır.
Bu ayrım önemlidir çünkü "değiştirilemez" iddiası denetçi karşısında çürütülebilir ve tek bir çürütülen iddia diğerlerinin de sorgulanmasına yol açar. "Değişiklik yapılırsa fark edilir ve şu şekilde doğrulanır" cümlesi hem doğrudur hem de daha güçlüdür.
Hash Zinciri Nasıl Çalışır?
Her denetim kaydı yazılırken, kaydın içeriği ve bir önceki kaydın özeti birlikte özetlenir. Sonuç kaydın kendi özeti olur ve bir sonraki kayda girdi olarak verilir. Böylece kayıtlar birbirine bağlanır.
Bu yapının değeri şudur: ortadaki bir kaydı değiştiren kişinin, o kaydın özetini yeniden hesaplaması gerekir. Ancak o özet bir sonraki kayda girmiştir, dolayısıyla sonraki tüm kayıtların özetleri de değişir. Tek bir satırı sessizce değiştirmek mümkün değildir; zincirin tamamını yeniden yazmak gerekir.
Zinciri güçlendiren ikinci unsur anahtardır. Özet hesabı gizli bir anahtarla yapıldığında (bu yönteme HMAC denir), anahtarı bilmeyen biri geçerli bir özet üretemez. Anahtarın veritabanında değil yapılandırma tarafında durması bu yüzden kritiktir: veritabanına erişen kişi anahtara erişmemelidir.
Ayrı Kopya Neden Gerekli?
Hash zinciri değişikliği fark edilebilir kılar ama silmeyi tek başına çözmez. Zincirin son beş kaydını silen biri, kalan zinciri tutarlı bırakabilir. Bu yüzden kayıtların ikinci bir yere, tercihen farklı erişim yetkisi olan bir yere kopyalanması gerekir.
Kopyanın tam satır olması önemlidir. Yalnızca birkaç alanı kopyalayan bir yaklaşım, karşılaştırma sırasında "bu alan zaten kopyada yoktu" boşluğunu bırakır. Kopya ile ana kayıt satır satır karşılaştırılabilmelidir.
Doğrulama: İddiadan Kanıta
Yapının en önemli parçası, çalıştırılabilir bir doğrulama işlemidir. Doğrulama üç şeyi kontrol etmelidir:
- Her kaydın özeti içeriğiyle tutarlı mı?
- Zincir kopmadan ilerliyor mu?
- Ana kayıt ile ayrı kopya birebir aynı mı?
Doğrulamanın sonucu ikili bir cevap olmamalıdır. "Geçti" veya "geçmedi" yerine, uyuşmayan satırların listesi verilmelidir. Denetimde asıl değerli olan hangi kaydın hangi noktada bozulduğunu görebilmektir.
Denetçiye ne söylemeli?
"Kayıtlarımız hash zinciriyle mühürleniyor, ayrı bir kopyaya yazılıyor ve bütünlük şu ekrandan tek işlemle doğrulanıyor; isterseniz şimdi çalıştıralım." Bu cümle, "loglarımız değiştirilemez" cümlesinden çok daha ikna edicidir çünkü test edilebilir.
Dürüstçe Kabul Edilmesi Gereken Sınırlar
Veritabanı yöneticisi her şeyi yapabilir. Yeterli yetkiye sahip biri satırları silebilir. Hash zinciri bunu geri getirmez, yalnızca fark edilir kılar. Bu yüzden yetki yönetimi ve ayrı kopya, şifrelemeden daha önemlidir.
Anahtar kaybolursa doğrulama yapılamaz. Anahtar yönetimi bu tasarımın en kırılgan noktasıdır. Anahtarın yedeği, saklama yeri ve değiştirilme prosedürü baştan yazılmalıdır.
Kayıt olmayan işlem korunamaz. En güçlü zincir bile yazılmamış bir kaydı koruyamaz. Kapsam dışı bırakılan bir ekran ya da doğrudan veritabanına yapılan bir müdahale, zincirin dışında kalır. Bu yüzden hangi işlemlerin kayıt ürettiği listesi, kriptografiden daha çok tartışılmalıdır.
Sık Sorulan Sorular
Değiştirilemez ile değişiklik belli arasındaki fark nedir?
Değiştirilemez, kaydın fiziksel olarak değiştirilemediğini iddia eder; genel amaçlı bir veritabanında bu iddia genellikle doğru değildir. Değişiklik belli ise daha dürüst bir hedeftir: kayıt değiştirilebilir ama değiştirildiği kanıtlanabilir biçimde ortaya çıkar. Denetimde işe yarayan ikincisidir.
Veritabanı yöneticisi denetim izini silerse ne olur?
Zincirin kopması bunu görünür kılar: silinen kaydın yerinde bir boşluk kalır ve sonraki kayıtların bağı doğrulanamaz hale gelir. Ayrı bir veritabanına yazılan kopya ise silmenin tek bir yetkiyle tamamlanmasını engeller. Hiçbiri silmeyi imkansız kılmaz, ikisi birlikte sessiz kalmasını engeller.
İmza anahtarı olmadan hash zinciri yeterli mi?
Yeterli değildir. Anahtarsız bir zinciri, veritabanına erişimi olan biri baştan sona yeniden hesaplayabilir ve hiçbir iz bırakmaz. Zincirin bir anahtarla imzalanması, tam da yakalamak istediğiniz kişinin zinciri yeniden kuramaması demektir. Anahtar uygulamada tutulmalı, veritabanında değil.
Doğrulamayı canlı çalıştıralım
Demo görüşmesinde bütünlük doğrulamasını çalıştırıp sonucu birlikte okuyalım.
Demo Planlayın →