Vì vậy, vấn đề AWS đang giải quyết ở đây là họ có một bộ giá trị, cụ thể là dịch vụ, khu vực và ngày hiện tại và họ muốn lấy một khóa bí mật khác phụ thuộc vào tất cả các giá trị này.
Bạn có thể tiếp tục và làm điều này với một PRF thông thường nhưng sau đó bạn gặp phải một vấn đề: Cụ thể là bạn không muốn gặp phải tình huống mà các giá trị xấu của bất kỳ mục nhập bộ dữ liệu nào đột nhiên dẫn đến xung đột khóa. Một sai lầm cổ điển sẽ e.g. được sử dụng nối thẳng và nếu họ không cẩn thận, bạn sẽ kết thúc với (hôm nay)
và (hôm nay)
mang lại cùng một khóa. Rõ ràng là các chuỗi đang chơi ở đây có nhiều cấu trúc hơn so với ví dụ, nhưng mối lo lắng cơ bản phải rõ ràng.
Bây giờ, cách hiệu quả nhất để giải quyết vấn đề trên là sử dụng chức năng ghép nối đảm bảo rằng không có hai bộ dữ liệu đầu vào riêng biệt nào mang lại cùng một đầu ra và do đó, cùng một đầu vào cho PRF. Tuy nhiên, việc thiết kế các chức năng như vậy cũng dễ bị lỗi nhẹ.
Tôi đoán chính vì điều này mà AWS đã chọn sử dụng chuỗi yêu cầu HMAC phức tạp này. Giờ đây, họ không phải lo lắng về các chức năng ghép nối phức tạp và tất cả những gì cần thiết là một loạt các đánh giá HMAC có thể thực hiện được ở hầu hết mọi ngôn ngữ/môi trường. Thực tế là điều này sau đó yêu cầu không ít hơn các hoạt động của HMAC được bù đắp bởi thực tế là tất cả các đầu vào cho dẫn xuất khóa này là phần nào tĩnh và bạn có thể lưu trữ các khóa trong khoảng một ngày nếu các hoạt động của HMAC tiêu tốn đáng kể thời gian tính toán của bạn.