Che giấu dữ liệu và tạo dữ liệu với Faker

Bảo mật dữ liệu và Ẩn danh trong Python

Rebeca Gonzalez

Data engineer

Quasi-identifier

Thông tin nhận dạng cá nhân không nhạy cảm cũng có thể là quasi-identifier. Chữ "Người đứng đầu chính phủ ở châu Âu" và một ngày sinh, kèm đường nối tới khuôn mặt Angela Merkel

1 Ảnh Angela Merkel từ Wikimedia Commons
Bảo mật dữ liệu và Ẩn danh trong Python

Quasi-identifier

Khi kết hợp với quasi-identifier khác, chúng trở thành định danh.

  • Tuổi
  • Giới tính
  • Nghề nghiệp
  • Ngày cá nhân: sinh, tử, nhập viện, thăm khám, v.v.

Hình vẽ một người đàn ông và các ô bật lên xung quanh chứa thông tin cá nhân

Bảo mật dữ liệu và Ẩn danh trong Python

Quasi-identifier và tấn công tái định danh

Sơ đồ giao nhau của hai tập dữ liệu: dữ liệu y tế và danh sách cử tri, phần giao là mã ZIP, ngày sinh và giới tính

Bảo mật dữ liệu và Ẩn danh trong Python

Các kỹ thuật ẩn danh khác

Kỹ thuật ẩn danh cho quasi-identifier để giảm rủi ro lộ dữ liệu. Hai bảng dữ liệu y tế và cá nhân. Bên trái dữ liệu gốc, bên phải là bộ dữ liệu sau khi ẩn thuộc tính tên

Bảo mật dữ liệu và Ẩn danh trong Python

Che giấu dữ liệu

DataFrame gốc

     name                phone
0    Cassandra Nelson    4399406975395
1    Brian Moss          0389407128613
2    Melody Gill         8283308773967
3    Sandra Huber        4366608954250
4    Patricia Webster    4466462475574

DataFrame với cột tên được che

     name    phone
0    xxxx    4399406975395
1    xxxx    0389407128613
2    xxxx    8283308773967
3    xxxx    4366608954250
4    xxxx    4466462475574

Thay giá trị nhạy cảm bằng ký tự khác như "x" còn gọi là che giấu dữ liệu (data masking).

Bảo mật dữ liệu và Ẩn danh trong Python

Che giấu dữ liệu

# Khám phá DataFrame
df.head()
     country         card_number           email
0    Finland         3546746666030419      [email protected]
1    Belarus         4303032415762821      [email protected]
2    Turkmenistan    4536883671157         [email protected]
3    Puerto Rico     3568819286614160      [email protected]
4    Angola          2514167462583016      [email protected]
Bảo mật dữ liệu và Ẩn danh trong Python

Che giấu dữ liệu

# Che đồng nhất cột số thẻ 
df['card_number'] = '****'


# Xem DataFrame kết quả df.head()
     country         card_number     email
0    Finland         ****            [email protected]
1    Belarus         ****            [email protected]
2    Turkmenistan    ****            [email protected]
3    Puerto Rico     ****            [email protected]
4    Angola          ****            [email protected]
Bảo mật dữ liệu và Ẩn danh trong Python

Che giấu dữ liệu một phần

Ảnh chụp trang đặt lại mật khẩu Facebook, hiển thị email được che một phần

Bảo mật dữ liệu và Ẩn danh trong Python

Che giấu dữ liệu một phần

# Che phần tên người dùng trong email
df2['email'] = df2['email'].apply(lambda s: s[0] + '****' + s[s.find('@'):] )


# Xem dữ liệu được bút danh hóa df2.head()
     country         card_number           email
0    Finland         3546746666030419      f****@gmail.com
1    Belarus         4303032415762821      m****@gmail.com
2    Turkmenistan    4536883671157         a****@gmail.com
3    Puerto Rico     3568819286614160      k****@gmail.com
4    Angola          2514167462583016      d****@gmail.com
Bảo mật dữ liệu và Ẩn danh trong Python

Tạo dữ liệu tổng hợp

Bên trái: bảng dữ liệu gốc có số thẻ; bên phải: số thẻ tín dụng mới được tạo tổng hợp.

  • Thay thông tin nhạy cảm bằng dữ liệu mới tạo, tương tự bản gốc.
Bảo mật dữ liệu và Ẩn danh trong Python

Tạo dữ liệu tổng hợp

# Import lớp Faker
from faker import Faker


# Tạo bộ sinh dữ liệu giả fake_data = Faker()
# Sinh số thẻ tín dụng fake_data.credit_card_number()
3542216874440804
Bảo mật dữ liệu và Ẩn danh trong Python

Tạo dữ liệu tổng hợp

# Che số thẻ bằng dữ liệu mới sinh với hàm lambda
df['card_number'] = df['card_number'].apply(lambda x: fake_data.credit_card_number())

# Xem dữ liệu được bút danh hóa df.head()
     country         card_number            email
0    Finland         3596625386355448       [email protected]
1    Belarus         376297265347524        [email protected]
2    Turkmenistan    4377494880888682       [email protected]
3    Puerto Rico     30553931809810         [email protected]
4    Angola          4241735748382          [email protected]
Bảo mật dữ liệu và Ẩn danh trong Python

Tạo các loại dữ liệu khác

fake_data.name()
'Kelly Clark'
fake_data.name_male()
'Antonio Henderson'
fake_data.name_female()
'Jennifer Ortega'
Bảo mật dữ liệu và Ẩn danh trong Python

Đến lúc thực hành!

Bảo mật dữ liệu và Ẩn danh trong Python

Preparing Video For Download...