Thông tin nhạy cảm được lưu trữ theo cách thức không an toàn là kẽ hở để dễ bị lộ lọt. Theo cơ quan về tội phạm máy tính CSI và báo cáo về an toàn gần đây [6], thì 50% nạn nhân là bị đánh cắp máy tính xách tay hoặc thiết bị lưu trữ di động. Đánh giá này cũng cho thấy từ năm 2001 đến năm 2007, việc đánh cắp các thiết bị lưu trữ đã xảy ra nhiều hơn so với các dạng tấn công khác như từ chối dịch vụ, gian lận truyền thông, truy nhập không được phép, gian lận về tài chính, truy nhập mạng không dây.
Bởi vậy, việc mã hoá dữ liệu lưu trữ là cần thiết để phòng tránh việc lộ lọt các thông tin bi mật, nhạy cảm khi các thiết bị lưu trữ bị đánh cắp.
Mã hóa trong môi trường lưu trữ có một số đặc tính khác so với mã hóa trong môi trường truyền thông mạng (do cơ chế cập nhật tại chỗ, thao tác dịch chuyển nội dung, cơ chế sao lưu...) Do vậy, nhiều chế độ mã khối như CBC, CFB, OFB, CTR được sử dụng trong mã hóa truyền thông mạng, nhưng khi dùng trong môi trường mã hóa dữ liệu lưu trữ lại không phù hợp do nảy sinh các tấn công: tấn công rò rỉ nội dung, tính dễ uốn (malleability), tấn công sao chép và dán, tấn công watermark [2] (đây là một tấn công đối với các phương pháp mã hóa dữ liệu lưu trữ, trong đó sự hiện diện của một thành phần dữ liệu đặc biệt khi được mã hóa có thể được phát hiện bởi kẻ tấn công không cần biết khóa mã)... Các thuật toán mã dựa trên khái niệm mã khối cải tiến - tweakable [1] (khác với mã khối thông thường có 2 đầu vào là khóa và khối rõ, mã khối cải tiến còn có thêm một đầu vào thứ 3 là tweak) có thể chống lại các tấn công này, và chúng có thể cài đặt một cách hiệu quả trong cả phần cứng và phần mềm. Chuẩn IEEE P1619 cũng đã công bố một số thuật toán mã chuyên sử dụng cho mã hóa trong môi trường lưu trữ. Dưới đây giới thiệu vắn tắt về các vấn đề này.
I. Một số giải pháp công nghệ mã hóa dữ liệu lưu trữ
Lưu trữ dữ liệu bảo mật là việc lưu trữ dữ liệu theo một cách mà nó chỉ có thể đọc hoặc chỉ được giải mã bởi người dùng được phép. Những người dùng không được phép thì không thể thu thông tin có nghĩa từ dữ liệu này, thậm chí khi có thể truy nhập vật lý tới thiết bị lưu trữ (ví dụ, trong trường hợp máy tính bị mất cắp).
Các phương pháp lưu trữ bảo mật khó khăn trong việc cài đặt bởi vì các lý do: Tính phức tạp của việc thiết lập, tổng chi phí và độ trễ thời gian trong khi thực thi (ví dụ, đọc và ghi tới tệp), quản lý khóa và quản lý mật khẩu.
Hình dưới đây minh họa các tầng truy cập đến dữ liệu trong thiết bị lưu trữ đối với hệ điều hành họ Unix và Windows. Đối với cả hai nền hệ điều hành, các ứng dụng sẽ ở trong không gian người sử dụng. Khi một ứng dụng Unix tạo một cuộc gọi tới một hệ thống tệp, thì cuộc gọi này tương tác với nhân và được xử lý bởi tầng hệ thống tệp ảo (VFS – Virtual File System) [5]. VFS cung cấp các chức năng chung nhất được sử dụng trong các hệ thống tệp khác nhau để dễ dàng cài đặt các hệ thống tệp riêng biệt và cho phép các hệ thống tệp khác nhau cùng tồn tại, gồm hệ thống tệp cục bộ như ext3, vfat và các hệ thống tệp mạng như NFS. Sau đó, các hệ thống tệp cục bộ tiếp tục đọc và ghi tới tầng khối (block), tầng này sẽ cung cấp một giao diện API nhất quán để truy nhập tới các thiết bị tầng block.
Khi một ứng dụng Windows tạo một cuộc gọi hệ thống tệp, cuộc gọi này sẽ được chuyển tới trình quản lý vào/ra (I/O Manager). Trình quản lý vào/ra sẽ chuyển cuộc gọi hệ thống tệp này thành các gói yêu cầu I/O, sau đó những gói yêu cầu này được chuyển thành các cuộc gọi thiết bị cụ thể. Các trình điểu khiển hệ thống tệp (File System Drivers) là các trình điểu khiển mức cao như FAT và NTFS. Những trình điều khiển này lại dựa trên các trình điều khiển thiết bị lưu trữ (Storage Device Drivers), đây chính là các trình điểu khiển mức thấp trực tiếp truy nhập tới thiết bị lưu trữ. Chú ý rằng, các tầng truy nhập tới dữ liệu trong kho chứa đối với cả hai nền hệ điều hành Unix và Windows sẽ là ánh xạ một – tới – một trong cấu trúc bên trong nó (ví dụ, tầng VFS ứng với I/O manager, File System ứng với File System Driver...). Bởi vậy, một giải pháp lưu trữ bảo mật được thiết kế cho một nền hệ điều hành có thể sử dụng chung cho cả hai nền hệ điều hành.
Quá trình lưu trữ dữ liệu từ ứng dụng của người sử dụng tới thiết bị lưu trữ được mô hình hóa thành các tầng (layer), tương ứng với những tầng này là các giải pháp mã hóa lưu trữ khác nhau: Mã hóa tệp/thư mục ở mức ứng dụng, hệ thống tệp mã hóa ở không gian người sử dụng (ví dụ phần mềm EncFS trên Linux), các hệ thống tệp bảo mật dựa trên môi trường truyền thông mạng (NFS), hệ thống tệp bảo mật dựa trên đĩa (ví dụ EFS của Microsoft), mã hóa ổ đĩa dựa trên tầng khối/sector, lưu trữ có bảo mật dựa trên phần cứng (tích hợp ngay trên thiết bị lưu trữ - ví dụ hãng Seagate ứng dụng “Công nghệ ổ tin cậy – DriveTrust Technology” trong những ổ cứng của máy tính xách tay Monmentus 5400 ).
II. So sánh đặc tính của mã hóa dữ liệu lưu trữ và mã hóa truyền thông mạng
1. Mã hóa truyền thông
Đa số các cơ chế được sử dụng rộng rãi để bảo mật dữ liệu là thông qua mã hóa. Một cách lý tưởng thì mỗi thông báo được mã hóa với một khóa ngẫu nhiên duy nhất để đạt được độ mật hoàn hảo trong khi các cài đặt trong đời sống thực thì còn rất xa mới đạt được sự hoàn hảo. Bởi vậy, để tránh các thông báo giống nhau được mã hóa sử dụng cùng một khóa (sẽ dẫn tới bản mã giống nhau), thì các vector khởi tạo (IV) sẽ được sử dụng trong quá trình mã hóa.
- Nhìn chung, áp dụng mã hóa trong môi trường truyền thông có chung những đặc tính sau:
- Luồng dữ liệu có thời gian tồn tại ngắn (ví dụ như đối với thông báo)
- Nội dung được ghi chỉ một lần (ví dụ đối với giao dịch).
Do bản chất của truyền thông là dữ liệu có thời gian tồn tại ngắn, và chỉ được ghi một lần nên tính duy nhất của khóa IV có thể đạt được bằng cách dịch vòng một không gian IV rất lớn trước khi thay đổi một khóa mới.
2. Mã hóa trong môi trường lưu trữ
Môi trường lưu trữ cũng tương tự như kênh truyền thông, với ý nghĩa là người gửi chuyển một thông báo tới một môi trường lưu trữ, và sau đó người nhận có thể lấy lại thông báo đó từ môi trường lưu trữ này. Bởi vậy, cũng có thể sử dụng các cơ chế mật mã tương tự. Tuy nhiên, mô hình lưu trữ khác biệt so với môi trường truyền thông ở một số yếu tố chính sau:
- Cập nhật tại chỗ (in-place update): Không giống như các thông báo truyền thông có thời gian tồn tai ngắn, một tệp lưu trữ có thời gian tồn tại lâu dài hơn. Việc cập nhật tới một tệp có thể được thực hiện tại chỗ (nội dung cũ được ghi đè với nội dung mới ở cùng một vị trí trên tệp). Bởi vậy nếu các IV được sinh ra bằng một hàm của tham số liên quan tới vị trí dữ liệu bên trong một tệp hoặc môi trường lưu trữ, thì tính duy nhất IV liên quan tới nội dung của dữ liệu bị thỏa hiệp.
- Dịch chuyển nội dung (Content shifting): Ngoài đặc tính cập nhật tại chỗ thì nội dung mới có thể được chèn thêm vào trong tệp, kết quả dẫn đến là việc dịch chuyển nội dung cũ. Do đó sẽ tiềm ẩn một lượng lớn các bản rõ gốc được mã hóa thông qua việc sử dụng IV được tạo ra từ hàm của vị trí tệp hoặc vị trí đĩa.
- Sao lưu (backup): Những người sử dụng đơn thuần có thể tin tưởng vào khả năng mã hóa mà không sử dụng các cơ chế sao lưu an toàn thích hợp. Ví dụ việc sao lưu ảnh từng byte một (byte-to-byte) trên thiết bị lưu trữ cho phép một số dạng tấn công chủ động, trong đó kẻ tấn công có thể tập hợp các phiên bản khác nhau của sao lưu, nên sẽ làm phá vỡ tính duy nhất của IV và khóa. Dạng tấn công này có thể rất nguy hiểm, bởi vì một kẻ tấn công ở phía môi trường lưu trữ có thể trích các bản rõ mà không cần truy nhập tới khóa hoặc thông tin về tài khoản của người dùng.
III. Mã hóa dữ liệu lưu trữ ở tầng khối/sector
1. Đặc thù riêng của mã hóa dữ liệu lưu trữ ở tầng khối/sector
Ngoài các tính đặc thù chung khi mã hóa dữ liệu lưu trữ được trình bày ở mục II.2, giải pháp mã hóa dữ liệu lưu trữ trên một thiết bị khối còn có những tính chất riêng sau:
- Dữ liệu được mã trên từng sector (512 byte): Do dữ liệu trên đĩa được chứa trong các sector. Các sector gồm các block có kích thước là 512 byte. Các sector này có thể được truy nhập ngẫu nhiên. Để tránh các thao tác phức tạp khi vận hành ổ đĩa, việc mã hóa ổ đĩa cũng cần phải thực hiện (xử lý) trên từng sector riêng biệt.
- Không đủ không gian để lưu các thông tin phụ (tính toàn vẹn, xác thực, IV...): Một đặc điểm khác rất quan trọng khi mã hóa ổ đĩa ở tầng sector là không thể sử dụng các không gian trên đĩa để lưu các thông tin như IV, tính toàn vẹn, xác thực.
2. Trường hợp tấn công điển hình: tính dễ uốn
Ví dụ một tấn công vào bản mã được sử dụng chế độ CBC để mã hóa dữ liệu lưu trữ ở tầng sector là Tính dễ uốn.
Khi một kẻ tấn công có thể thay đổi bản mã trong sector để nhận được hiệu quả mong muốn trong bản rõ được giải mã (ví dụ như tăng tiền lương trong cơ sở dữ liệu), thuật toán mã hóa được gọi là dễ uốn.
Với những đặc điểm riêng được trình bày ở trên, nếu sử dụng chế độ mã CBC để mã hóa dữ liệu lưu trữ ở tầng sector thì:
- CBC chỉ được áp dụng trong phạm vi từng sector riêng biệt (bởi vì nếu áp dụng đến toàn bộ ổ đĩa, khi thay đổi một sector thì các sector khác sẽ phải mã hóa lại, do đó ảnh hưởng tới thời gian thực thi của hệ thống).
- Do không có không gian lưu kết quả kiểm tra tính toàn vẹn của dữ liệu nên giải pháp mã hóa ở dữ liệu trước khi giải mã một sector. Bởi vậy kẻ tấn công có thể thay đổi một khối mã trong sector, dẫn tới khi giải mã khối kế tiếp sẽ cho kết quả là một bản rõ bị thay đổi (sẽ nguy hiểm khi khối rõ đó chứa dữ liệu có tính chất quan trọng).
Ở mức độ khối mã đơn giản, bất kì mã pháp đối xứng mạnh nào như AES - 128 là không thể uốn. Tuy nhiên, ở mức độ sector, tính dễ uốn có thể phát sinh. Ví dụ, kẻ tấn công biết lương của anh ta được lưu trữ trong khối mã i và lương của Chủ tịch công ty lưu trong khối mã j. Khi đó đơn giản là đảo vị trí của hai khối mã trong đĩa thì kẻ tấn công sẽ nhận được kết quả mong muốn.
Một phương pháp ngăn cản tấn công đổi chỗ là mã hóa mỗi sector của dữ liệu sử dụng chế độ CBC và sử dụng IV duy nhất dựa vào số sector. Điều này chống lại việc đổi chỗ cả bên trong và giữa các sector, nhưng vẫn là để ngỏ với tấn công dễ uốn khác.
Ví dụ trên được minh họa như sau:
Trong chế độ CBC ta có:
Ci+1 = EK(Ci 9Pi+1)
trong đó Ci và Pi là bản mã và rõ với khối mã i và C0 = IV. Nếu kẻ tấn công biết lương của anh ta trong khối mã i+1, anh ta sẽ thay đổi Ci thành Ci’ (bằng cách lật bit thứ b trong bản mã Ci) chẳng hạn:
Ci’ = 2b 9Ci
bây giờ giải mã sẽ cho kết quả mong muốn:
Pi+1’ = Ci’ 9D(Ci+1) = 2b 9Ci 9D(Ci+1) = 2b 9Pi
Do đó kẻ tấn công sẽ nhận kết quả anh ta mong muốn, mặc dù giải mã Ci’ nhận được bản rõ giả ngẫu nhiên.
Minh họa tấn công này như sau:
Mã hóa sector chứa dữ liệu tiền lương của Jim:
Giải mã sector chứa cơ cở dữ liệu tiền lương một cách bình thường:
Giải mã sector chứa cơ cở dữ liệu tiền lương khi khối mã của Bob bị thay đổi (tính dễ uốn), bản ghi tiền lương của Jim đã được tăng từ 1100 lên 1500.
Như vậy, do đặc tính mã hóa dữ liệu lưu trữ ở tầng sector là không có không gian để lưu tính toán vẹn của dữ liệu, các chế độ mã thông thường không thể chống lại những tấn công đã nêu trên, do đó phải có những nghiên cứu về những thuật toán mã đặc biệt chuyên phục vụ mã hóa dữ liệu lưu trữ.
V. Tiêu chuẩn bảo vệ dữ liệu lưu trữ IEEE P1619
IEEE P1619 là một đề án chuẩn của IEEE (Institute of Electrical and Electronics Engineers – Viện kỹ thuật điện và điện tử) về mã hóa cho dữ liệu lưu trữ, kết quả được thực hiện bởi. Nhóm nghiên cứu về an toàn dữ liệu lưu trữ (Security in Storage Working Group - SISWG), nhóm này đã đưa ra một họ các tiêu chuẩn để bảo vệ dữ liệu lưu trữ và phương pháp quản lý khóa mã tương ứng.
SISWG làm việc trên 4 tiêu chuẩn sau:
- P1619 - Chuẩn kiến trúc cho môi trường lưu trữ chia sẻ có mã hóa (Standard Architecture for Encrypted Shared Storage Media) – Còn gọi là chuẩn mã hóa khối hẹp (Narraw-Block Encryption). Chuẩn này phù hợp cho mã hóa dữ liệu lưu trữ trong một thiết bị khối được cố định (fixed-block device).
Sử dụng chế độ mã khối hẹp XTS-AES (XEX-based Tweaked CodeBook mode (TCB) with CipherText Stealing (CTS).
Chuẩn này được chấp nhận vào tháng 12/2007. Ngày 04/10/2008, NIST đã hoàn thành và công bố việc xem xét XTS-AES. Dựa trên những công bố này, NIST đang xem xét để quyết định liệu có sử dụng XTS-AES làm một chế độ hoạt động được chấp nhận trong FIPS 140.
- P1619.1- Chuẩn mã hóa được xác thực với mở rộng độ dài cho các thiết bị lưu trữ (Standard for Authenticated Encryption with Length Expansion for Storage Devices). Chuẩn này phù hợp cho các thiết bị lưu trữ dữ liệu mà hỗ trợ các khối có thể mở rộng (expanding block). Tất cả các chế độ trong chuẩn này sử dụng thuật toán mã khối AES-256 được chấp nhận bởi NIST). Các chế độ trong chuẩn này gồm:
- CCM- 28- AES- 256: Chế độ bộ đếm với CBC- MAC
- GCM - 128 - AES- 256: Chế độ Galois/Counter
- CBC- AES - 256- HMAC- SHA: Chế độ mã hóa móc xích khối mã với mã xác thực thông báo.
- XTS- AES- 256- HMAC- SHA: Mã hóa XTS với mã xác thực thông báo.
Tháng 12/2007, IEEE đã chấp nhận P1619.1, coi là tiêu chuẩn IEEE Std 1619.1- 2007
- P1619.2 - Chuẩn mã hóa khối rộng cho môi trường lưu trữ chia sẻ (P1619.2 Standard for Wide-Block Encryption for Shared Storage Media). Chuẩn này đặc tả một kiến trúc cho mã hóa dữ liệu trong các thiết bị lưu trữ truy nhập ngẫu nhiên, hướng tới các ứng dụng mà sử dụng kích thước khối mã 512 byte hoặc lớn hơn. Tháng 10/2008, nhóm nghiên cứu P1619.2 đã quyết định chỉ sử dụng EME2 và XCB. Hiện chuẩn này chưa được chấp nhận.
- P1619.3 - Chuẩn cho hạ tầng quản lý khóa để bảo vệ dữ liệu lưu trữ (Standard for Key Management Infrastructure for Cryptographic Protection of Stored Data). Chuẩn này định nghĩa các phương pháp cho lưu trữ, quản lý và phân phối các khóa mã được sử dụng để bảo vệ dữ liệu lưu trữ.
Kết luận
Như vậy, các đặc tính của bảo mật dữ liệu lưu trữ là khác cơ bản so với đặc tính của bảo mật dữ liệu truyền thông trên mạng, và các giả định mật mã về tính duy nhất của khóa và véctơ khởi tạo gắn với nội dung dữ liệu có thể đã bị vi phạm đối với các cơ chế lưu trữ khác nhau. Có rất nhiều tấn công khi sử dụng các cơ chế mã hóa như CBC, OFB, CFB, CTR để mã hóa dữ liệu lưu trữ như: Tấn công rò rỉ nội dung, tấn công watermark, tấn công sao chép và dán, tấn công về tính dễ uốn của thuật toán mã hóa... Các thuật toán mã dựa trên khái niệm mã khối cải tiến (tweakable) [1] (như XTS, LRW) có thể chống lại những tấn công này