CodeGym /Kurslar /SQL SELF /pgcrypto ilə məlumatların şifrələnməsinə giriş

pgcrypto ilə məlumatların şifrələnməsinə giriş

SQL SELF
Səviyyə , Dərs
Mövcuddur

Heç məlumat oğurluğu haqqında eşitmisən? Ay bala, bu təkcə Hollivud filmlərində olmur ha. Şirkətlər milyonlarla dollar itirir, reputasiyaları kart evləri kimi dağılır. Bunun baş verməməsi üçün, məlumatları mütləq qorumaq lazımdır. Ən güclü yanaşmalardan biri — şifrələmədir.

Şifrələmə — məlumatları "gizli kod"a çevirmək üsuludur, hansı ki, deşifrə açarı olmadan başa düşmək mümkün deyil. PostgreSQL-də pgcrypto adlanan möhtəşəm bir extension var, bu da məlumatlarınızı şifrələmə prosesini çox asanlaşdırır.

pgcrypto — PostgreSQL üçün extension-dur, hansı ki, məlumatların şifrələnməsi və deşifrələnməsi, hash-ləmə və təsadüfi məlumatların generasiyası üçün güclü alətlər verir.

pgcrypto-nun əsas imkanları:

  1. Simmetrik (bir açar) və assimetrik (açar cütü: private və public) üsulla şifrələmə.
  2. Məlumatların yoxlanması üçün hash-ləmə (məsələn, parollar üçün).
  3. Token, açar və parol yaratmaq üçün istifadə oluna biləcək təsadüfi məlumatların generasiyası.

Bax belə, pgcrypto-nu öz bazanda necə qoşursan. Əgər əvvəllər düşünürdün ki, sehr yalnız Hogwarts-ın sehrbazlarına aiddir, qoy PostgreSQL səni təəccübləndirsin.

-- pgcrypto extension-un qoşulması
CREATE EXTENSION IF NOT EXISTS pgcrypto;

Simmetrik şifrələmə: Sirlərini kodlaşdırırıq

Şifrələmə və deşifrələmə üçün funksiyalar:

  1. pgp_sym_encrypt(data, key) — məlumatı simmetrik açarla şifrələyir.
  2. pgp_sym_decrypt(data, key) — eyni açarla şifrələnmiş məlumatı deşifrə edir.

Nümunə: sadə mətnin şifrələnməsi

Tutaq ki, bizdə users adlı cədvəl var, email sütunu ilə, və biz email ünvanlarını şifrələmək istəyirik.

-- users cədvəlini yaradırıq
CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    email TEXT
);

-- Məlumat əlavə edirik
INSERT INTO users (email)
VALUES ('user1@example.com'), ('user2@example.com');

-- Məlumatı şifrələyirik
UPDATE users
SET email = pgp_sym_encrypt(email, 'supersecretkey');

-- Nəticəni yoxlayırıq
SELECT * FROM users;

Nəticə: email sütununda indi mənasız simvollar toplusu kimi görünən şifrələnmiş mətn saxlanılır.

Məlumatın deşifrə olunması

Məlumatı əvvəlki halına qaytarmaq lazım olanda, pgp_sym_decrypt funksiyasından istifadə et.

-- Məlumatın deşifrə olunması
SELECT pgp_sym_decrypt(email::bytea, 'supersecretkey') AS original_email
FROM users;

Qeyd: açarlara qənaət etmə! "123456" kimi açar qoymaq — qapıya parol qoyub, sonra qapını açıq buraxmaq kimidir. Uzun və mürəkkəb açarlardan istifadə et.

Məlumatların hash-lənməsi: parol qoruması steroidlərdə

Parolları açıq şəkildə bazada saxlamaq — gündəliyini yataq altında gizlətmək kimidir. Elə etmə! Bunun əvəzinə hash-ləmə istifadə et.

Hash-ləmə üçün funksiya: crypt(password, gen_salt('bf'))password sətrinin Blowfish alqoritmi ilə hash-ini yaradır.

-- Parolun hash-lənməsi nümunəsi
SELECT crypt('my_password', gen_salt('bf'));

Nəticə təxminən belə görünəcək: $2a$10$Efgnd3tFs3tOH6r3RgW5/uLPhNTa43k5E2C5Ut0Ydo7RNHZjG.vi.

Parolu yoxlamaq üçün eyni funksiyanı istifadə et:

-- Parolun yoxlanması
SELECT crypt('my_password', '$2a$10$Efgnd3tFs3tOH6r3RgW5/uLPhNTa43k5E2C5Ut0Ydo7RNHZjG.vi') 
       = '$2a$10$Efgnd3tFs3tOH6r3RgW5/uLPhNTa43k5E2C5Ut0Ydo7RNHZjG.vi';

Nəticə: true.

Məsləhət: heç vaxt parolları açıq şəkildə saxlamayın. Hətta sənə elə gəlirsə ki, bazan super qorunur, həmişə hash-lərdən istifadə et.

Assimetrik şifrələmə: İki açar birindən yaxşıdır

Assimetrik şifrələmə iki açardan istifadə edir:

  1. Public açar (şifrələmə üçün).
  2. Private açar (deşifrə üçün).

Nümunə: public açarla şifrələmə

-- Açar cütü yaradırıq (sadəlik üçün dəyişənlərdə saxlayırıq)
DO $$
DECLARE
    public_key TEXT;
    private_key TEXT;
BEGIN
    SELECT pgp_keygen_keys(1024, 'my_passphrase')
    INTO public_key, private_key;

    RAISE NOTICE 'Public Key: %', public_key;
    RAISE NOTICE 'Private Key: %', private_key;
END $$;

Assimetrik şifrələmənin tətbiqi

Müasir sistemlər tez-tez assimetrik şifrələmədən istifadə edir, məsələn, SSL bağlantılarında məlumat mübadiləsi üçün.

Təsadüfi məlumatların generasiyası

Token və ya təsadüfi açar yaratmaq üçün gen_random_uuid və ya gen_random_bytes funksiyasından istifadə et.

Nümunə:

-- Təsadüfi UUID generasiyası
SELECT gen_random_uuid();

-- Təsadüfi bayt massivinin generasiyası
SELECT gen_random_bytes(16);

Bu, unikal identifikatorlar, giriş token-ləri və ya təsadüfi parollar yaratmaq üçün faydalıdır.

pgcrypto-nun istifadə ssenariləri

  1. Məxfi məlumatların şifrələnməsi:
  • Kredit kart nömrələri.
  • Müştəri şəxsi məlumatları (məsələn, ünvanlar, telefon nömrələri).
  • Tibbi qeydlər.
  1. Parolların hash-lənməsi: Əmin ol ki, hətta verilənlər bazasının admini belə istifadəçi parollarını görə bilmir.

  2. Məlumatların təhlükəsiz ötürülməsi: Şifrələnmiş məlumatların ötürülməsi üçün assimetrik şifrələmədən istifadə.

  3. Token-lərin generasiyası: API istifadəçilərinin autentifikasiyası üçün token-lər yaratmaq.

Şifrələmə ilə işləyərkən tipik səhvlər

Açarların əlçatan yerlərdə saxlanılması. Heç vaxt şifrələmə açarlarını açıq şəkildə verilənlər bazasında saxlamayın. Bunun üçün secret manager-lərdən istifadə et.

Zəif açarlardan istifadə. Əgər şifrələmə açarı çox qısadırsa, onu tapmaq asan olacaq.

Lazımsız şifrələmə. Şifrələmə məlumatların işlənməsinə əlavə resurs tələb edir. Onu yalnız həqiqətən lazım olan yerdə istifadə et.

Hansı açardan istifadə etdiyini unutmaq. Sistem sənədləşməsi yoxdursa, məlumatı deşifrə etmək mümkün olmaya bilər.

Şifrələmə — çətin deyil, əksinə, məlumatlarını qorumaq üçün məntiqli addımdır. pgcrypto-nu layihələrində istifadə et və bazanı yalnız təhlükəsiz yox, həm də müasir standartlara uyğun et. PostgreSQL sənə məlumatlarını alınmaz qalaya çevirmək üçün bütün alətləri verir.

2
Tapşırıq
SQL SELF, səviyyə, dərs
Bağlanıb
Simmetrik şifrələmə ilə məlumatların şifrələnməsi və deşifrələnməsi
Simmetrik şifrələmə ilə məlumatların şifrələnməsi və deşifrələnməsi
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION