Saya tahu std::array
benar-benar dialokasikan dalam tumpukan, tetapi pertanyaan ini dimotivasi oleh masalah keamanan yang memerlukan dua hal:
- Data di
std::array
akan zerod atau acak pada kehancuran - Data di
std::array
akan dikunci , sehingga tidak pernah masuk ke disk baik pada crash atau pada memori swap
Biasanya, dengan std::vector
, solusinya adalah membuat pengalokasi khusus yang melakukan hal-hal ini . Namun, untuk std::array
, saya tidak melihat bagaimana melakukan ini, dan karenanya pertanyaan ini.
Yang terbaik yang bisa saya lakukan adalah ini:
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);
}
}
Tapi ini jelas tidak memiliki penguncian memori dan menyulitkan skema kinerja std::array
yang harus diperoleh dengan menggunakan std::array
di tempat pertama.
Apakah ada solusi yang lebih baik?