PDA

Orijinalini görmek için tıklayınız : Veri Şifreleme Hakkında Soru


ARTFM
04-03-2019, 17:35:42
Değerli dostlar merhaba, diyelim ki web siteme ait MySQL'de bir kullanıcının bilgilerini şifrelemek istiyorum, evet MD5 gibi araçlarla mümkün olduğunu biliyorum ancak şifrelenen bu bilginin sadece benim tarafımdan çözülebilmesini istiyorum. Bunu nasıl yapabilirim?

Yani hem olası bir sızma girişiminde bu bilgiyi güvende tutmak hem ihtiyaç halinde görebilmek istiyorum.

ebubekirbastama
04-03-2019, 17:38:42
Özel algoritma yapabilirsin.

ARTFM
04-03-2019, 17:41:47
Özel algoritma yapabilirsin.

Çocuğa anlatır gibi anlatabilir misiniz? Bilgim yok sadece fikrim var zira. Cehaletimi bağışlayın. Örneğin bu algoritmayı yazarken hangi mantıkla başlamalı, hangi dili kullanmalı ve MySQL'e tanıtmak için ne yapmalıyım?

berkantipek
04-03-2019, 17:42:44
MD5 bir hashing algoritması. Yani MD5'in kriptografik hash fonksiyonunun içine bir veri verirsin, o sana bir digest üretir. MD5 sana 128 bitlik bir digest verir, bunu ASCII'ye çevirdiğin zaman 0a0b0f54d58d4s4d.. tarzı bir verin olur elinde. Ve hash fonksiyonunun altın kuralı çıkan digest'in geri çevrilemez olması.

Aradığın şey encryption, hashing değil. Encryption olayında elindeki bir secret key ile veriyi şifreleyip ciphertext üretirsin ve bunu saklarsın. O ciphertexti yine aynı secret key ile çözebilirsin. Araştırman gereken şeyler "encryption in php", "AES", "DES".

Ve yukarıdaki arkadaşın dediği gibi bir şey yapmaya çalışma. Kendi algoritmanı yazmak nedir ya hu? AES gibi ABD sistemlerinde dahi kullanılan standartlaşmış bir simetrik enkripsiyon sistemi varken.

Mcrypt veya OpenSSL modüllerini kullanabilirsin:

http://php.net/manual/tr/mcrypt.examples.php
http://php.net/manual/tr/ref.openssl.php

Jrmostal
04-03-2019, 17:49:28
Yeterli bilgi verildi mi yoksa örneklerle anlatayım mı ?

ARTFM
04-03-2019, 17:49:36
MD5 bir hashing algoritması. Yani MD5'in kriptografik hash fonksiyonunun içine bir veri verirsin, o sana bir digest üretir. MD5 sana 128 bitlik bir digest verir, bunu ASCII'ye çevirdiğin zaman 0a0b0f54d58d4s4d.. tarzı bir verin olur elinde. Ve hash fonksiyonunun altın kuralı çıkan digest'in geri çevrilemez olması.

Aradığın şey encryption, hashing değil. Encryption olayında elindeki bir secret key ile veriyi şifreleyip ciphertext üretirsin ve bunu saklarsın. O ciphertexti yine aynı secret key ile çözebilirsin. Araştırman gereken şeyler "encryption in php", "aes", "des".

Mcrypt veya OpenSSL modüllerini kullanabilirsin:

http://php.net/manual/tr/mcrypt.examples.php
http://php.net/manual/tr/ref.openssl.php

Çok teşekkür ediyorum, kaynaklara bakmadan önce sormak istediğim bir şey var; bunu yalnızca benim çözebileceğim şekilde konfigüre edebilir miyim?

" Encryption olayında elindeki bir secret key ile veriyi şifreleyip ciphertext üretirsin ve bunu saklarsın. O ciphertexti yine aynı secret key ile çözebilirsin. "

Yukarıdaki cümlenizden anladığım kadarıyla veriye anlamsız bir değer oluşturacağım, bu değeri çözmek de sadece bende bulunan secret key ile mükün olacak. Doğru mudur?



Yeterli bilgi verildi mi yoksa örneklerle anlatayım mı ?

Anlatabilirseniz inanın çok müteşekkir olurum. Zerre bilgim yok zira bu konuda.

berkantipek
04-03-2019, 17:53:12
Çok teşekkür ediyorum, kaynaklara bakmadan önce sormak istediğim bir şey var; bunu yalnızca benim çözebileceğim şekilde konfigüre edebilir miyim?

Şu cümlenizden anladığım kadarıyla veriye anlamsız bir değer oluşturacağım, bu değeri çözmek de sadece bende bulunan secret key ile mükün olacak. Doğru mudur?





Anlatabilirseniz inanın çok müteşekkir olurum. Zerre bilgim yok zira bu konuda.

Secret key dediğin şey her tipte veri olabilir, raw byte olabilir, string olabilir vs. vs. Ama yüksek ihtimalle string tercih edersin.

$secretKey = 'ahmetMehmet';

Sonra artık hangi modulu kullanıyorsan, fonksiyon parametrelerinin birine plain veriyi, diğerine ise bu keyi girersin. Ardından sana ciphertext döndürür.

Jrmostal
04-03-2019, 18:01:47
İhtiyacın olan şey, bir veriyi bir anahtarla şifrelemek ve o sadece o anahtarla ihtiyaç anında çözebilmek. Bunun için 2 fonksiyon yazman lazım.

1. EncryptText şifreleme için
2. DecryptText şifrelenmiş veriyi çözmek için.

Mesela biri Des'ten bahsetmiş.

Des gibi algoritmalarda bir anahtar oluşturuyorsun

encryptionPrivateKey = "blabla"

des algoritması bu key ile her hangi bir veriyi şifreleyip aynı keyle çözebilir. Db de veriler şifreli durur ve keyi olmayan kimse onu çözemez. Hatta keyi olsa bile o bilgisayardan başka bilgisayarda çözülememesinin de bir yolu var. O biraz karmaşık bir yöntem. Sana fonksiyonları gönderebilirim ama kendinde arayarak webde bulabilirsin.

Teknik konuşmadan anlatması zormuş cidden, çok teknik anlattılar diye bir daha anlatayım dedim ama beceremedim sanki :)

AndyCap
04-03-2019, 18:17:07
Bunu yapmadan önce şunu (https://crypto.stackexchange.com/questions/43272/why-is-writing-your-own-encryption-discouraged) okumanızı istiyorum. [ Kriptoloji de 1.kural - Kendi şifreleme algoritmanı üretmeye çalışma :) ] Bu işe MySQL'i dahil etmek istiyorsanız UDF yazmanız gerekiyor. Ama bunu uygulama kodu içinde yapmak her zaman daha güvenlidir. berkantipek; openssl-encrypt önermiş ki bende aynı şeyi öneriyorum size. Onun dışında PHP 7.2 ile birlikte yeni bir crypto kütüphanesi eklendi incelemeni öneririm. BKNZ (https://blog.zend.com/2018/11/06/modern-cryptography-in-php-7-2-with-sodium/)

ARTFM
04-03-2019, 18:18:03
İhtiyacın olan şey, bir veriyi bir anahtarla şifrelemek ve o sadece o anahtarla ihtiyaç anında çözebilmek. Bunun için 2 fonksiyon yazman lazım.

1. EncryptText şifreleme için
2. DecryptText şifrelenmiş veriyi çözmek için.

Mesela biri Des'ten bahsetmiş.

Des gibi algoritmalarda bir anahtar oluşturuyorsun

encryptionPrivateKey = "blabla"

des algoritması bu key ile her hangi bir veriyi şifreleyip aynı keyle çözebilir. Db de veriler şifreli durur ve keyi olmayan kimse onu çözemez. Hatta keyi olsa bile o bilgisayardan başka bilgisayarda çözülememesinin de bir yolu var. O biraz karmaşık bir yöntem. Sana fonksiyonları gönderebilirim ama kendinde arayarak webde bulabilirsin.

Teknik konuşmadan anlatması zormuş cidden, çok teknik anlattılar diye bir daha anlatayım dedim ama beceremedim sanki :)

Şimdi daha net oturdu. İnternette hazır bir kod kaynağı bulabilirsem problem yaşamayacağım sanırım. Yaşarsam sizi ufak bir rahatsız ederim olmazsa. Ağzınıza sağlık hocam :)



Bunu yapmadan önce şunu (https://crypto.stackexchange.com/questions/43272/why-is-writing-your-own-encryption-discouraged) okumanızı istiyorum. [ Kriptoloji de 1.kural - Kendi şifreleme algoritmanı üretmeye çalışma :) ] Bu işe MySQL'i dahil etmek istiyorsanız UDF yazmanız gerekiyor. Ama bunu uygulama kodu içinde yapmak her zaman daha güvenlidir. @berkantipek (https://www.r10.net/member.php?u=104595); openssl-encrypt önermiş ki bende aynı şeyi öneriyorum size. Onun dışında PHP 7.2 ile birlikte yeni bir crypto kütüphanesi eklendi incelemeni öneririm. BKNZ (https://blog.zend.com/2018/11/06/modern-cryptography-in-php-7-2-with-sodium/)

Hehey, neler geliyor. Konuyu açarken yardım gelir mi diye düşündüm. Çiçek gibi kaynaklar geldi. Çok teşekkür ediyorum :)