Chcę wyczyścić poufne dane z pamięci w mojej aplikacji na iOS. W systemie Windows użyłem SecureZeroMemory. Teraz, w iOS, używam zwykły stary memset, ale jestem trochę zaniepokojony kompilator może zoptymalizować go: https://buildsecurityin.us-cert.gov/bsi/articles/knowledge/coding/771-BSI.htmlJaki jest prawidłowy sposób czyszczenia poufnych danych z pamięci w systemie iOS?
fragment kodu:
NSData *someSensitiveData;
memset((void *)someSensitiveData.bytes, 0, someSensitiveData.length);
Pomyślałem, że może istnieje odpowiednik SecureZeroMemory() w iOS. Twoje rozwiązanie wygląda dobrze, ale co powiesz na "Rozwiązanie powinno być skuteczne na większości platform, ale zapoznaj się z dokumentacją platformy, aby sprawdzić, czy wystarczy odwoływać się do jednej postaci w ten sposób." – HyBRiD
Myślę, że to tylko ostrożnie kręci się tam iz powrotem. Jest to podyktowane przez standard, że dostęp do zmiennych lotnych NIE jest zoptymalizowany. W rzeczywistości może się zdarzyć, że jeden znak jest portem sprzętowym, a dostęp do odczytu wyzwala coś na poziomie sprzętu. Z niestabilnością deklarujesz kompilatorowi, że wiesz lepiej od niego i że nawet nie myśli o próbie optymalizacji tego dostępu. A ponieważ dostęp ten zależy od elementu memset() przed nim, memset() nie zostanie zoptymalizowany. – nalply
Twoja funkcja 'secure_memset' może nie być wystarczająca. Według http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1381.pdf optymalizują kompilatory, które wyzerują tylko pierwszy bajt. –