Lý lịch. Tất cả các thuật toán MKDF (KDF cứng bộ nhớ) mà tôi biết (Scrypt, Argon2, Balloon) không thực sự yêu cầu tất cả bộ nhớ tại mọi thời điểm trong thời gian chạy triển khai thuật toán, mà thay vào đó yêu cầu một hình phạt tính toán nặng nề khi sử dụng ít bộ nhớ hơn .
Đại khái, biểu đồ sử dụng bộ nhớ theo thời gian trông như thế này (tất nhiên, MKDF tốt hơn sẽ có nhiều mức tăng đột biến liền kề hơn):
(Hình ảnh từ ở đó)
Tôi nghĩ hạn chế này (không cần bộ nhớ mọi lúc) là do cách thức hoạt động của các máy tính có mục đích chung (ví dụ: CPU, RAM).
Câu hỏi. Nếu chúng tôi nới lỏng giả định về phần cứng (ví dụ: cho phép phần cứng chuyên dụng), chúng tôi có thể xác định thuật toán MKDF yêu cầu tất cả bộ nhớ của nó tại mọi thời điểm không? Ví dụ. chúng ta có thể làm cho nó sao cho biểu đồ hiển thị một đường thẳng không?
Suy nghĩ của tôi cho đến nay. Hãy tưởng tượng nếu chúng ta có một mặt phẳng bộ nhớ cơ học, trong đó trạng thái của mọi bit bộ nhớ được kết nối với trạng thái của mọi bit khác, sao cho nếu chúng ta lật giá trị của một bit, nó sẽ gây ra việc lật mọi bit khác trong toàn bộ bộ nhớ.
Với mặt phẳng bộ nhớ cơ học này, chúng tôi thực hiện một lệnh duy nhất lật 1 bit và thao tác đơn đó sẽ lật trạng thái của tất cả các bit khác một cách cơ học.
Nếu mối quan hệ giữa các bit không thể dự đoán được (ví dụ: tương tự như cách một thay đổi nhỏ trong giá trị khối của văn bản rõ ràng dẫn đến thay đổi hoàn toàn trong văn bản mật mã), thì tôi đoán bộ nhớ cơ học này đã trở thành MKDF có thể hoạt động như thế này:
- Người dùng khởi tạo bộ nhớ bằng cách lấp đầy nó bằng các bit ngẫu nhiên được tạo ra từ một số hạt giống. Điều này được thực hiện chỉ một lần.
- Người dùng mã hóa mật khẩu của mình theo các bit quan trọng nhất trên mặt phẳng bộ nhớ cơ học. Điều này rõ ràng được thực hiện mỗi khi người dùng muốn lấy một khóa an toàn hơn từ mật khẩu của mình.
- Vì người dùng đang mã hóa mật khẩu của mình trong các bit đầu tiên của trang bộ nhớ cơ học đó, trạng thái của tất cả các bit trong trang bộ nhớ cơ học sẽ thay đổi theo cách không thể đoán trước.
- Cuối cùng, khi người dùng mã hóa xong mật khẩu của mình, anh ta chỉ cần chọn các bit ít quan trọng nhất của mặt phẳng bộ nhớ cơ học đó làm khóa dẫn xuất.
Nếu một đối thủ cố gắng làm điều này với một mặt phẳng bộ nhớ cơ học nhỏ hơn (với ít bit bộ nhớ hơn), thì khóa dẫn xuất của anh ta sẽ hoàn toàn ngẫu nhiên.
Nếu dự đoán của tôi là đúng và việc triển khai phần cứng như vậy là khả thi, thì:
- Đây là một nền tảng cho các thuật toán dựa trên phần cứng MKDF luôn yêu cầu cùng một lượng bộ nhớ, tại từng khoảnh khắc trong thời gian chạy của chức năng dẫn xuất khóa.
- Người dùng mua một mặt phẳng bộ nhớ cơ học duy nhất cho thông tin đăng nhập của riêng mình, vì vậy người dùng có thể mua nó vì đây là một lần mua hàng. Nhưng đối thủ sẽ phải mua nhiều tờ này để thực hiện chúng song song. Vì vậy, tôi đoán nó có thể mở rộng cho người dùng, nhưng không thể mở rộng cho đối thủ.
Tôi đoán chúng ta có thể thực hiện mặt phẳng bộ nhớ cơ học này bằng cách sử dụng:
- Lượng tử vướng víu có lẽ là một cách suy nghĩ tự nhiên hơn về nó.
- Một bảng cơ khí lớn với nhiều dầu mỡ để các bánh răng không bị kẹt.
- Điện tử cho một giải pháp thay thế nhỏ hơn và ít nhờn hơn.