Ich weiß, dass std::array
der Stapel vollständig zugeordnet ist, aber diese Frage ist durch Sicherheitsbedenken motiviert, die zwei Dinge erfordern:
- Die Daten in
std::array
werden bei Zerstörung auf Null gesetzt oder zufällig ausgewählt - Die eingehenden Daten
std::array
werden gesperrt , sodass sie weder beim Absturz noch im Swap-Speicher auf die Festplatte übertragen werden
Normalerweise besteht std::vector
die Lösung darin, einen benutzerdefinierten Allokator zu erstellen , der diese Aufgaben ausführt . Doch für die std::array
, ich sehe nicht , wie dies zu tun , und deshalb wird diese Frage.
Das Beste, was ich tun kann, ist Folgendes:
template <typename T, std::size_t Size>
struct SecureArray : public std::array<T, Size>
{
static_assert(std::is_pod<T>::value, "Only POD types allowed")
static_assert(sizeof(T) == 1, "Only 1-byte types allowed")
virtual ~SecureArray()
{
std::vector<uint8_t> d = RandomBytes(Size); // generates Size random bytes
std::memcpy(this->data(), d.data(), Size);
}
}
Dies fehlt jedoch offensichtlich die Speichersperre und verkompliziert das Leistungsschema, std::array
das durch std::array
die erstmalige Verwendung erreicht werden soll.
Gibt es eine bessere Lösung?