std::array
스택에 완전히 할당 된 것을 알고 있지만이 질문은 두 가지 사항이 필요한 보안 문제로 인해 발생합니다.
std::array
파괴시 데이터는 제로화되거나 무작위 화됩니다.- 충돌이나 스왑 메모리에 디스크로 가지 않도록 데이터
std::array
가 잠 깁니다 .
일반적으로와 함께 std::vector
솔루션은 이러한 작업 을 수행 하는 사용자 지정 할당자를 만드는 것 입니다. 그러나에 std::array
대해이 작업을 수행하는 방법을 보지 못 하므로이 질문에 대한 답을 얻지 못했습니다.
내가 할 수있는 최선은 이것입니다 :
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);
}
}
그러나 이것은 분명히 메모리 잠금이 부족 하고 처음부터 std::array
사용하여 얻는 성능 체계를 복잡하게 만듭니다 std::array
.
더 나은 해결책이 있습니까?