Table of Contents
Hiểu mã hoá dữ liệu trên iOS
iOS thực hiện mã hóa tại nhiều lớp để bảo vệ dữ liệu nhạy. Ở cấp phần cứng, Enclave quản lý các khóa mã hóa và thao tác mã hóa. Ở cấp độ điều hành Bảo vệ data dùng các khóa mật mã của tập tin để giải mã các mã các mã của thiết bị. Đối với dữ liệu ứng dụng cụ thể, các nhà phát triển có thể áp dụng các khuôn khổ như CrytoKit, Commonpto, và khung bảo mật để mã hoá các hồ sơ cá nhân, tập tin, hoặc tải lên mạng.
Bộ mã hóa chuyển đổi thành mật mã (Acryation) bằng cách dùng thuật toán và phím. Nếu không có chìa khóa chính xác, thì dữ liệu vẫn không đọc được. Apple’s [FLT: 0] [FLT: 0] [FLT: 1] tự động mã hóa tập tin vào phần còn lại, nhưng các nhà phát triển cần mã hóa rõ ràng để lưu trữ dữ liệu bên ngoài hệ thống được bảo vệ. Chẳng hạn như trong « Dữ liệu Core, Người dùngDefaults » (bộ nhớ tạm tùy thích).
Chìa khóa chiếm ưu tiên: dữ liệu nhạy cảm điện tử khi nó ở trên thiết bị , ngay cả khi nó được bật dùng mã hóa iOS theo mặc định. Việc này bảo vệ chống lại việc truy cập thiết bị vật lý, khai thác pháp y, hoặc ứng dụng độc hại chạy trong cùng hộp cát.
iOS mã hóa Khung và ADIs
Chọn đúng thư viện phụ thuộc vào mục tiêu triển khai và mức độ kiểm soát cần thiết.
Mật mã Kit – Bộ giao diện y tế hiện đại
Giới thiệu trong iOS 13, mật mã [FLT: 0] [FLT: 1] để xác thực hóa sự mã hóa, bảo vệ cả sự bảo mật lẫn tính trung thực. Bên dưới là một mẫu mã và giải mã điển hình:
import CryptoKit
func encryptSensitiveData(_ plaintext: String, using key: SymmetricKey) throws -> Data {
let inputData = Data(plaintext.utf8)
let sealedBox = try AES.GCM.seal(inputData, using: key)
return sealedBox.combined
}
func decryptSensitiveData(_ encryptedData: Data, using key: SymmetricKey) throws -> String {
let sealedBox = try AES.GCM.SealedBox(combined: encryptedData)
let decryptedData = try AES.GCM.open(sealedBox, using: key)
return String(decoding: decryptedData, as: UTF8.self)
}
Luôn luôn cất giữ trong Keychain, không phải trong UserDefaults hay một tập tin bình thường. Hãy dùng với để buộc chìa khóa vào thiết bị và sự hiện diện của người dùng.
ChungCrypto – Độ dễ bay C- Baseed
Để hỗ trợ các phiên bản iOS cũ hơn hoặc cần thiết các chế độ mật mã tự chọn (v. d., CBC với HMAC), CommonCrypto cung cấp các chức năng C cấp các chức năng thấp. Nó hỗ trợ AES, DES, 3DES, và nhiều thuật toán có mã hóa hES-CBC. Ví dụ mã hóa AES-CBC:
#include <CommonCrypto/CommonCryptor.h>
- (NSData *)aes256Encrypt:(NSData *)plaintext withKey:(NSData *)key iv:(NSData *)iv {
size_t outLength;
NSMutableData *ciphertext = [NSMutableData dataWithLength:plaintext.length + kCCBlockSizeAES128];
CCCryptorStatus status = CCCrypt(kCCEncrypt, kCCAlgorithmAES, kCCOptionPKCS7Padding,
key.bytes, key.length, iv.bytes,
plaintext.bytes, plaintext.length,
ciphertext.mutableBytes, ciphertext.length,
&outLength);
if (status == kCCSuccess) {
ciphertext.length = outLength;
return ciphertext;
}
return nil;
}
ChungCrypto cần thiết khả năng quản lý hướng dẫn sử dụng véc- tơ gốc (IVs) và thẻ xác thực. Để xác thực mã hoá, cặp AES-CBC với một hệ thống HMAC riêng biệt, hoặc chuyển đổi sang AES-GCM qua CTKT nếu có thể.
Khung bảo mật làm việc và móc khóa
Cơ sở bảo mật cung cấp dịch vụ Keychain để lưu trữ các phím, chứng nhận và mật khẩu bảo mật. Hãy dùng để lưu trữ các phím có điều khiển truy cập chặt chẽ (v. d., cần thiết người dùng có mặt qua B Vi tính). Con Inclove có thể tạo và lưu các phím riêng cho thao tác ECC, bảo đảm phím không bao giờ để lại phần cứng.
Giải mã các loại dữ liệu khác nhau
Không phải tất cả dữ liệu cần cùng một chiến lược mã hóa. Saur các phương pháp tiếp cận để làm thế nào và nơi các dữ liệu được sử dụng.
Đang mã hoá mặc định và dữ liệu lõi người dùng
Người dùngDefaults và cửa hàng dữ liệu Core là đơn giản trừ khi được mã hóa. Đối với cơ sở dữ liệu lõi, hiệu lực các thuộc tính [FLT: 0] Bộ phát âm thuộc tính trên tập tin cửa hàng. Để mã hóa các tính chất riêng lẻ, mã hóa hay toàn bộ đối tượng trước khi lưu:
- Dùng dữ liệu lõi có thể chuyển hóa với một biến đổi giá trị tùy chọn mã hóa/giải mã trên đọc/ ghi.
- Nối lại toàn bộ vật thể với tên JSON, mã hóa nó, và lưu trữ văn bản mật mã trong một thuộc tính nhị phân.
- Đối với người dùngDefaults, không bao giờ lưu các chuỗi nhạy cảm thô; mã hóa mỗi giá trị và lưu dữ liệu đã mã hóa.
Ví dụ về việc lưu trữ dữ liệu đã được mã hóa trong các tổ hợp người dùng:
let key = SymmetricKey(size: .bits256)
let data = "user_ssn".data(using: .utf8)!
let sealedBox = try AES.GCM.seal(data, using: key)
UserDefaults.standard.set(sealedBox.combined, forKey: "encrypted_ssn")
UserDefaults.standard.synchronize()
Mã hóa tập tin với sự bảo vệ tập tin
iOS đề nghị lớp bảo vệ tập tin: , , và . Đặt những tính chất này khi tạo hay di chuyển tập tin:
let fileURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!.appendingPathComponent("data.bin")
try FileManager.default.setAttributes([.protectionKey: FileProtectionType.complete], ofItemAtPath: fileURL.path)
Kết hợp sự bảo vệ tập tin với mã hóa rõ ràng nếu dữ liệu phải được bảo vệ ngay cả khi thiết bị này không mở khóa. Chẳng hạn, mã hóa tập tin với một phím được cất giữ trong Keychain và có thể truy cập chỉ sau khi xác thực.
Đang mã hóa dữ liệu mạng (bảo mật lớp trục)
Bảo mật giao thông (ATS) áp dụng HTTPS theo mặc định. Đối với kết nối TCP riêng, hãy dùng với đem ra SSL hoặc thực hiện mã SSL để ngăn chặn các cuộc tấn công giữa người đàn ông vào trong. Mã hóa tải về các lớp phòng thủ thêm vào ứng dụng: ngay cả khi mục tiêu bị lộ, dữ liệu vẫn được bảo vệ.
Thực hành tốt nhất quản lý khóa
Mật mã chỉ mạnh bằng việc quản lý chìa khóa. Hãy theo các hướng dẫn này để bảo vệ an ninh:
- Các phím dân tộc dùng một số bảo mật ngẫu nhiên ) để dùng hoặc .
- Phím Khoá độc quyền trong Keychain ) với những tính năng thích hợp: ngăn cản việc sao lưu và liên kết phím vào thiết bị.
- Dùng xác thực sinh trắc học hay mật mã ) trước khi lấy chìa khóa – với lực lượng người dùng xác thực.
- Phím chuyển sang chế độ theo thời gian biểu hoặc sau một sự kiện bảo mật – Ghi chú lại dữ liệu với các phím mới và cẩn thận xoá các phím cũ.
- Đừng khoá mã cứng [FLT: 1] trong tập tin mã nguồn hay cấu hình. Phím Derive từ mật khẩu người dùng bằng chức năng giải mã phím chậm (PBKDF2 hay scrypt) khi cần thiết.
- Không thể xuất khẩu các phím bảo mật [FLT: 1] cho thế hệ quan trọng đối xứng – không thể xuất khẩu, ngăn chặn việc lọc.
Đối với ứng dụng xử lý dữ liệu nhạy cảm, hãy xem xét bằng cách dùng mô-đun bảo mật phần mềm [FLT: 0] [HLT: 1] [FLT: 1], mặc dù đó là giới thiệu tính dễ dàng và yêu cầu kết nối internet.
Xoay phím và mã hóa
Khi phím bị hỏng hoặc sau một khoảng thời gian định nghĩa (v. d., mỗi 90 ngày), xoay phím. Điều này bao gồm giải mã tất cả dữ liệu bằng phím cũ, tạo ra một phím mới, và mã hóa lại. Đối với bộ dữ liệu lớn, thực hiện một bộ mã hoá phím đã phiên bản:
- Lưu một bộ nhận diện phím (v. d., UUID) bên cạnh mỗi đĩa được mã hóa.
- Giữ bản đồ bộ nhận diện cho các phím thật trong móc chìa khóa (được mã hóa trong phần còn lại).
- Trong lúc quay, thêm một mục mới mà không cần mã hóa lại tất cả dữ liệu.
Sự đồng thuận và những sự điều chỉnh
Bộ mã hóa giao thức mã hóa cho dữ liệu nhạy. GLT [FLT:] [FLT:] [FLT:]] [FLT:] [FLT:]] Bộ mã hóa ePHT:1] đòi hỏi các biện pháp kỹ thuật kỹ thuật kỹ thuật kỹ thuật, và mã hóa được công nhận. [FLTSSSSS [FLT: 2] [HT:] [HT:2] [HT:] [HTS] [FA:] [FLT:] [FT:]] Bộ bảo vệ tập tin mật mã hoá bộ mã hoá tập tin], sau đây bộ mã hóa dữ liệu bộ mã hóa tập tin của Apple kết hợp với các yêu cầu mã hóa tập tin mật mã hóa tập tin mật mã hóa của bộ mã hoá tập tin.
Từ chối tài liệu chính thức của Apple cho các khuyến cáo mới nhất: Hướng dẫn về nhà phát triển lập pháp ) [FLT:] Dịch vụ bảo mậtKeychain [FLT:], và [LT: t] Bảo vệ quyền riêng tư [FLTT:5]. Để hướng dẫn ngành công nghiệp, xem [FL:6] Hướng dẫn Kiểm tra An ninh [FL: 6] [FLT: 7] và [L: 8 - 8 - 8 - 8 - 8 - 8 - TB [Đ.
Thử thách và kiểm tra
Sau khi thực hiện mã hóa, xác minh nó hoạt động đúng:
- Đơn vị ghi rằng mã hóa và giải mã được biết đến lập chứng và xác nhận kết quả.
- Kiểm tra các trường hợp: dữ liệu rỗng, trọng tải rất lớn, và mật mã bị hỏng.
- Thực hiện kiểm tra an ninh bằng cách sử dụng một thiết bị phá vỡ nhà tù để mô phỏng kịch bản tấn công xác nhận rằng phím vẫn không thể truy cập mà không cần xác thực.
- Dùng công cụ phân tích tĩnh để đảm bảo không có phím mã cứng hoặc thuật toán yếu.
- Xem lại bản ghi — không bao giờ đăng nhập dữ liệu nhạy cảm hoặc phím mã hóa.
Kết luận
Mã hóa dữ liệu được giải mã cho kho dữ liệu iOS là một tiến trình lưu trữ đa chiều. Bằng cách kết hợp khả năng bảo vệ tập tin iOS, mã hoá ứng dụng với mật mã mã mãryprypto hay CommonCrypto, và quản lý chặt chẽ qua Keychain và bảo mật Enclave, các nhà phát triển có thể giảm đáng kể rủi ro phơi bày dữ liệu. Tính năng tương ứng với quy định như GDPR và HIPA đòi hỏi dữ liệu, có thể kiểm tra kiểm tra mã hoá. Kiểm tra thường xuyên và xoay vòng xoay xoay bảo mật. Đầu tư trong một cấu trúc mã không chỉ bảo vệ dữ liệu người dùng mà còn đáp ứng các mong đợi và cũng có thể quản lý.