Biraz da PL/SQL sorguları ve blokları ile ilgilenelim dedim ve Oracle’ın gömülü paketlerinden olan DBMS_OBFUSCATION_TOOLKIT’i inceleyeceğiz. Herşeyden önce bu kelimelerin Türkçe anlamlarını ifade edelim. “To obfuscate” karartmak ve “Toolkit” araç demek. Aklınıza bu paketle ilgili olarak ilk gelen şey konusunda haklısınız.
DBMS_OBFUSCATION_TOOLKIT bize verinin encrypt edilmesini yani şifrelenmesini sağlamaktadır. Bunu yaparken de DES (Data Encyrption Standard) kullanılmaktadır. Bir soru olarak şunu sorabilirsiniz “Veritabanımdaki veriler kıymetli ve kötü niyetli bir DBA’in bu verileri görüntülemesini istemiyorum ve verimi korumak istiyorum.” Bu sorunun cevabı olarak DBMS_OBFUSCATION_TOOLKIT kullanalım demek yerine aslında DBA hesabını koruyalım cevabı daha mantıklıdır.
Bu özet anlatımdan sonra DBMS_OBFUSCATION_TOOLKIT’in neler yapabildiğine bakalım;
DES olarak bilinen ve 20 yıldan fazladır bir ANSI standardı olarak kullanılmakta olan şifreleme metodu kullanılmaktadır. Banklar da özel işlemleri için bu tipte bir algoritmayı kullanarak şifreleme işlemi gerçekleştirmektedirler. DES ileride yerini AES (Advanced Encyrption Standard)’a bırakacaktır. DES mantığına göre şifrelenecek olan her bilginin bir anahtarı vardır ve bu anahtar hem şifrelemekte hem de şifreyi çözmekte kullanılmaktadır. DES şifrelemesini yaparken 64-bit bloklar kullanarak 56-bit anahtarlama gerçekleştirmektedir.
Oracle DBMS_OBFUSCATION_TOOLKIT paketini SYS kullanıcısı altında oluşturmaktadır. Bu paket yaratıldıktan sonra isterseniz, dilediğiniz kullanıcı veya role paketin çalıştırılması hakkını atayabilirsiniz. PUBLIC’e de aynı hak tanınabilir.
Anahtarlama yönetimine baktığımızda ise en önemli faktör, veriler için düzgün anahtarlamanın yapılıyor olmasıdır. Eğer anahtarlama kötü şekilde seçilirse, kırması da kolay olacaktır. Bu durumda olası bir saldırıda karşıda bulunan kişinin uygulayacağı metod rastgele anahtarlar seçerek, doğru olanı beklemek yerine bir kripto analiz ile zayıf anahtarlama kırılabilir. Anahtarlama rastgele olarak sayılardan seçilmekte ve şifreleme de buna göre tamamlanmaktadır.
DBMS_OBFUSCATION_TOOLKIT paketi bizim için rastgele sayılardan oluşan bir anahtarlama, şifreleme yöntemi sunmaktadır ancak bu anahtarlamanın bakımını yapmamaktadır. Uygulamayı geliştiren kişinin sorumluluğunda olan bu durum, sürekli olarak kontrol edilmeli ve paket kullanılmalıdır. Bunun yanı sıra, DBMS_OBFUSCATION_TOOLKIT ile gerçekleştirilen anahtarlama ve diğer bütün işlemler sunucu tarafında bulunmaktadır, kullanıcı tarafında değil. Anahtarlamanın kullanıcıdan sunucuya geçtiği durumlarda da aradaki bağlantının (network connection) da şifrelenmiş olması gerekmektedir.
Yapılan anahtarlamanın bulunacağı ve saklanacağı yerle ilgili yapabileceğiniz 3 farklı yol bulunmaktadır;
Bu yöntem her zaman ve %100 koruma sağlamayabilir zira kötü niyetli bir DBA için ulaşması kolay olacaktır. Bunun nedeni her DBA’in şifrelenmiş olan veriye her an ulaşabileceğidir. Tabii bu tipte bir koruma, saklama yöntemi diğer kullanıcılar için oldukça faydalı olabilir. Bir örnek olarak kullanıcıların TC Kimlik Numaraları’nı seçebiliriz. Bu numaraları aynı tabloda anahtarlamak ve saklamak yerine başka bir tabloda anahtarlayıp ve saklayıp, PK – FK (Primary Key, Foreign Key) ilişkisini kullanabilirsiniz. Bunu da yine paketi kullanarak, doğru anahtarlamayı bulup yapabilirsiniz.
Oracle’ın tavsiye ettiği PL/SQL kod şifrelenmesi yöntemi “wrap”tir yani sarmak, paketlemektir. Bu şekilde anahtarlama içeren bir kodu da diğer kullanıcılardan saklamış olursunuz. Sarılı haldeki bir PL/SQL bloğu aşağıdaki şekilde olabilir;
01
CREATEORREPLACEPACKAGE BODY LOADER wrapped
02
0
03
abcd
04
abcd
05
abcd
06
3
07
b
08
9200000
09
1
10
4
11
0
12
27a
13
2 :e:
14
1PACKAGE:
15
1BODY:
16
1OPTIMA_LOADER:
17
1POP_LOADER_PARAMS:
18
1P_PRID:
19
....
20
/
Anahtarları İşletim Sisteminde Saklamak
PL/SQL bloğu içerisinden yapabileceğiniz isteklerle işletim sistemi üzerinde sakladığınız şifrelenmiş anahtarlarınızı talep edebilirsiniz. Burada da dikkat edilmesi gereken konu hem veritabanı kullanıcısının hakları hem de bu kullanıcının, anahtarları sakladığınız (muhtemelen bir dosyada) objeye olan erişim ve kullanım hakları.
Anahtarları Kullanıcıya Yönettirmek
Eğer anahtarları size sağlayacak olan kullanıcının kendisi ise, bir ağ şifrelemesi yapıyor olmanız oldukça önemlidir.
DBMS_OBFUSCATION_TOOLKIT’in sahip olduğu prosedür ve fonksiyonlar aşağıdadır;
DES3ENCRYPT DES3DECRYPT DES3GETKEY
DESENCRYPT DESDECRYPT DESGETKEY MD5
İçerisinde “3″ olan prosedür veya fonksiyon isimlendirmeleri DES’in farklı bir tür anahtarlamasını kullanmaktadır ve biraz daha komplike bir algoritmadır. Yukarıdaki paketlerin sentaksları aşağıda gösterilmektedir;
001
DES3ENCRYPT
002
003
DBMS_OBFUSCATION_TOOLKIT.DES3Encrypt(
004
input INRAW,
005
keyINRAW,
006
encrypted_data OUTRAW,
007
which INPLS_INTEGER DEFAULTTwoKeyMode
008
iv INRAW DEFAULTNULL);
009
010
DBMS_OBFUSCATION_TOOLKIT.DES3Encrypt(
011
input_string INVARCHAR2,
012
key_string INVARCHAR2,
013
encrypted_string OUTVARCHAR2,
014
which INPLS_INTEGER DEFAULTTwoKeyMode
015
iv_string INVARCHAR2 DEFAULTNULL);
016
017
DBMS_OBFUSCATION_TOOLKIT.DES3Encrypt(
018
input INRAW,
019
keyINRAW,
020
which INPLS_INTEGER DEFAULTTwoKeyMode
021
iv INRAW DEFAULTNULL)
022
RETURNRAW;
023
024
DBMS_OBFUSCATION_TOOLKIT.DES3Encrypt(
025
input_string INVARCHAR2,
026
key_string INVARCHAR2,
027
which INPLS_INTEGER DEFAULTTwoKeyMode
028
iv_string INVARCHAR2 DEFAULTNULL)
029
RETURNVARCHAR2;
030
031
DES3DECRYPT
032
DBMS_OBFUSCATION_TOOLKIT.DES3DECRYPT(
033
input INRAW, keyINRAW,
034
decrypted_data OUTRAW,
035
which INPLS_INTEGER DEFAULTTwoKeyMode
036
iv INRAW DEFAULTNULL);
037
DBMS_OBFUSCATION_TOOLKIT.DES3DECRYPT(
038
input_string INVARCHAR2,
039
key_string INVARCHAR2,
040
decrypted_string OUTVARCHAR2,
041
which INPLS_INTEGER DEFAULTTwoKeyMode
042
iv_string INVARCHAR2 DEFAUTL NULL);
043
DBMS_OBFUSCATION_TOOLKIT.DES3DECRYPT(
044
input INRAW, keyINRAW,
045
which INPLS_INTEGER DEFAULTTwoKeyMode
046
iv INRAW DEFAULTNULL)
047
RETURNRAW;
048
DBMS_OBFUSCATION_TOOLKIT.DES3DECRYPT(
049
input_string INVARCHAR2,
050
key_string INVARCHAR2,
051
which INPLS_INTEGER DEFAULTTwoKeyMode
052
iv_string INVARCHAR2 DEFAULTNULL)
053
RETURNVARCHAR2;
054
DES3GETKEY
055
DBMS_OBFUSCATION_TOOLKIT.DES3GetKey(
056
which INPLS_INTEGER DEFAULTTwoKeyMode,
057
seed INRAW,
058
keyOUTRAW);
059
060
DBMS_OBFUSCATION_TOOLKIT.DES3GetKey(
061
which INPLS_INTEGER DEFAULTTwoKeyMode,
062
seed_string INVARCHAR2,
063
keyOUTVARCHAR2);
064
065
DBMS_OBFUSCATION_TOOLKIT.DES3GetKey(
066
which INPLS_INTEGER DEFAULTTwoKeyMode,
067
seed INRAW)
068
RETURNRAW;
069
070
DBMS_OBFUSCATION_TOOLKIT.DES3GetKey(
071
which INPLS_INTEGER DEFAULTTwoKeyMode,
072
seed_string INVARCHAR2)
073
RETURNVARCHAR2;
074
075
DESDECRYPT
076
DBMS_OBFUSCATION_TOOLKIT.DESDecrypt(
077
input INRAW, keyINRAW,
078
decrypted_data OUTRAW);
079
DBMS_OBFUSCATION_TOOLKIT.DESDecrypt(
080
input_string INVARCHAR2,
081
key_string INVARCHAR2,
082
decrypted_string OUTVARCHAR2);
083
DBMS_OBFUSCATION_TOOLKIT.DESDecrypt(
084
input INRAW,
085
keyINRAW)
086
RETURNRAW;
087
DBMS_OBFUSCATION_TOOLKIT.DESDecrypt(
088
input_string INVARCHAR2,
Ders Sahibi;
Bilgisayar Dershanesi
Yorumlar
Yorum Yapabilmek İçin Üye Girişi Yapmanız Gerekmektedir.