Tôi biết std::array
được phân bổ hoàn toàn trong ngăn xếp, nhưng câu hỏi này được thúc đẩy bởi các mối quan tâm bảo mật đòi hỏi hai điều:
- Dữ liệu trong
std::array
sẽ là zerod hoặc ngẫu nhiên khi hủy - Dữ liệu trong
std::array
sẽ bị khóa , sao cho nó không bao giờ vào đĩa mà không gặp sự cố hoặc trên bộ nhớ trao đổi
Thông thường, với std::vector
, giải pháp là để tạo ra một cấp phát tùy chỉnh mà làm các điều ấy . Tuy nhiên, đối với std::array
, tôi không thấy làm thế nào để làm điều này, và do đó câu hỏi này.
Điều tốt nhất tôi có thể làm là đây:
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);
}
}
Nhưng điều này rõ ràng là thiếu khóa bộ nhớ và làm phức tạp sơ đồ hiệu suất của std::array
điều đó sẽ đạt được bằng cách sử dụng std::array
ở nơi đầu tiên.
Có giải pháp nào tốt hơn không?