Şifrelemede kullanılan anahtarı gizlemek

Arkadaşlar Python ile kendi veritabanı sistemimi yapmaya çalışıyorum ama encrypt ettiğim datanın keylerini nasıl saklicam hiçbir fikrim yok yardımcı olabilir misiniz ?

O anahtarlar erişilebilir olduktan sonra şifrelemenin anlamı yok.

Peki yaptığım sistemi nasıl sifrelicem ki ozaman

Verileri kimden saklamaya çalışıyorsunuz?

Genel olarak veritabanına erisilmesin kullanan kişiden başka

Burada birkaç yöntemden bahsedilmiş:

En kolay yol şifreyi sadece veri tabanına erişecek kişinin bilmesidir herhalde.

Evet ama şifreyi de keye donusturmem gerekiyor ve eğer kişi yanlış şifre girerse asıl şifrenin keye dönüşmüş haline denk gelebilir yanlış sifreninde dönüşmüş hali

Ne demek istediğinizi anlamadım ama ben şunu demek istemiştim: veritabanını şifrelerken ve deşifre ederken kullanılacak anahtarı kullanıcı girecek.

Bu arada bu projeyi kendinizi geliştirmek için yapıyorsunuz sanırım, veritabanı güvenliğine gerçek bir uygulamada ihtiyaç duyuyorsanız bilinen bir kütüphane kullanmanız gerektiğini söylememe gerek yok herhalde.

Zaten suanki yaptıklarımın hepsi kendimi geliştirmeye yönelik olmalı bence bu yüzden yapicam

Mesela adamın girdiği key yanlış olsa
Ama şifre ile aynı encrypt sonucu verse nolcak

1 Beğeni

Şifreleme algoritmamızda bir açık olduğunu görmüş olacağız. Siz nasıl bir algoritma kullanıyorsunuz ki?

Bana bu cevabı arkadaşım vermişti bende size aktardım :smile: o algoritmalar dan hangisini kullanmalıyım ki ve keyi dosyanın içine gizlesem olmazmı yani datanın yanında key olucak

Veritabanina erismeye calisan seyin kullanan kisi olup olmadigini nasil anlayacagiz?

Anlayamiyacagiz ama verilerin ortada öylece koruma olmadan durmasını istemiyorum kişi veritabanına ulaşmak isitiyorsa şifresini giricek en azından sistemi öyle dusunuyorum

Verileri kimden ve neden korumaya çalışıyorsunuz? Veritabanında ne tür veriler olacak?

1 Beğeni

O zaman şifrenin saklanmasına gerek yok, ilk başta şifreyi de kullanıcı seçer veya uygulama rastgele bir tane oluşturup ona söyler.

1 Beğeni

Tam olarak aradigim cevap! Ve aslinda iyi bir sekilde yanlis:

“kişi […] şifresini giricek” ise dogru kisiyi bu sekilde tanimlayabiliyoruz: sifresini girebilen kisi dogru kisi, giremeyen kisi yanlis kisi.

Kisinin girdigi sifreyi bir Key Derivation Function’dan (KDF) gecirip ciktiyi (simetrik) key olarak kullanabilirsin.

Söylediğiniz seyi birazdaha acarmisiniz en azından bir link :smiley:

Sanıyorum @aib şundan bahsediyor:

Key, anahtar demek; derivation, türetme demek, function’ı da zaten biliyorsunuz. O halde bahsettiği şey, anahtar türetme fonksiyonu gibi bir anlama karşılık geliyor. Yani fonksiyon, kendisine parametre olarak verilen bir karakter dizisi için, bir takım işlemler sonucunda şifrelenmiş bir çıktı üretecek.

Bildiğim kadarıyla bcrypt bu tarz bir şifreleme fonksiyonu.

Örnek:

from flask_bcrypt import Bcrypt

bcrypt = Bcrypt()
hashed_password = bcrypt.generate_password_hash("hello")
print(bcrypt.check_password_hash(hashed_password, "hello"))

bcrypt’in özelliği şu; mesela hello karakter dizisi için generate_password_hash fonksiyonunu art arda çağırarak aynı şifreyi iki kez üretemezsiniz.

Buna benzer şifre oluşturucu ve şifre çözücü fonksiyonları Python’ın standart modülü olan secrets'ı kullanarak siz de yazabilirsiniz.

Örneğin:

from secrets import token_hex


class Bcrypt:
    __matching = {}
    
    @classmethod
    def create_password_hash(cls, string: str):
        hashed_password = token_hex(32)
        cls.__matching[hashed_password] = string
        return hashed_password
        
    @classmethod
    def check_password_hash(cls, hashed_password: str, string: str):
        return cls.__matching[hashed_password] == string
        
                
bcrypt = Bcrypt()
hashed_password = bcrypt.create_password_hash("hello")
print(bcrypt.check_password_hash(hashed_password , "hello"))
1 Beğeni

Encrypt etmek icin kullanilan sifrenin bir md5 veya sha özetini veritabaninda tutabilirsin. Kullanıcı sifreyi girince özetini alip veritabanindaki ozet ile karşılaştırarak doğru olup olmadığını kontrol edebilirsin. Linux sistemlerindeki gibi.

1 Beğeni