Tôi muốn xóa dữ liệu nhạy cảm khỏi bộ nhớ trong ứng dụng iOS của mình. Trong Windows tôi đã sử dụng để sử dụng SecureZeroMemory. Bây giờ, trong iOS, tôi sử dụng đồng bằng memset cũ, nhưng tôi là một chút lo lắng trình biên dịch có thể tối ưu hóa nó: snippet https://buildsecurityin.us-cert.gov/bsi/articles/knowledge/coding/771-BSI.htmlCách chính xác để xóa dữ liệu nhạy cảm khỏi bộ nhớ trong iOS là gì?
mã:
NSData *someSensitiveData;
memset((void *)someSensitiveData.bytes, 0, someSensitiveData.length);
Tôi nghĩ có thể có tương đương với SecureZeroMemory() trong iOS. Giải pháp của bạn có vẻ tốt, nhưng "Giải pháp sẽ có hiệu quả trên hầu hết các nền tảng, nhưng hãy tham khảo tài liệu nền tảng để xác minh rằng nó đủ để tham chiếu một nhân vật theo cách này". – HyBRiD
Tôi nghĩ rằng điều này chỉ là thận trọng waddling đến và fro. Nó được quyết định bởi tiêu chuẩn truy cập vào các biến dễ bay hơi KHÔNG được tối ưu hóa. Trong thực tế nó có thể là một trong những nhân vật là một cổng phần cứng và truy cập đọc kích hoạt một cái gì đó về mức độ phần cứng. Với volatile bạn khai báo với trình biên dịch mà bạn biết tốt hơn nó và nó thậm chí không bao giờ nghĩ về việc cố gắng tối ưu hóa truy cập đó đi. Và bởi vì truy cập đó phụ thuộc vào memset() ở phía trước nó, memset() sẽ không được tối ưu hóa. – nalply
Chức năng 'secure_memset' của bạn có thể không đủ. Theo http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1381.pdf, có tối ưu hóa các trình biên dịch sẽ chỉ bằng không byte đầu tiên. –