KMAC มาตรฐานเป็นมากกว่านั้นด้วย การแยกโดเมน คำนำหน้า; NIST SP 800-185
KMAC128(K, X, L, S):
เงื่อนไขความถูกต้อง: $\text{len}(K) < 2^{2040}$ และ $0
\le L < 2^{2040}$ และ $\text{len}(S) < 2^{2040}$
- newX = bytepad(encode_string(K), 168) || X || right_encode(L)
- ส่งคืน cSHAKE128 (newX, L, âKMACâ, ส).
และ
cSHAKE128(X, L, N, S):
เงื่อนไขความถูกต้อง: $\text{len}(N) < 2^{2040}$ และ $\text{len}(S) < 2^{2040}$
- ถ้า N = "" และ S = "":
กลับ SHAKE128(X, L);
- อื่น:
ส่งคืน KECCAK[256](bytepad(encode_string(N) || encode_string(S), 168) || X || 00, ล)
และ NIST FIPS 202
SHAKE128(M, d) = KECCAK[256] (ม || 1111, ง),
ข้อมูลของ NIST เกี่ยวกับคำต่อท้าย
ส่วนต่อท้ายรองรับโดเมน
แยก; กล่าวคือ แยกแยะอินพุตของ KECCAK[c] ที่เกิดจากฟังก์ชันแฮช SHA-3
จากอินพุตที่เกิดจาก SHA-3 XOFs ที่กำหนดไว้ในมาตรา 6.2 เช่นเดียวกับโดเมนอื่นๆ ที่
อาจถูกกำหนดขึ้นในอนาคต
กล่าวคือ เรามี oracles แบบสุ่มที่แตกต่างกันไปตามการแยกโดเมน SHA3 และ Blake2 นั้นใกล้เคียงกับออราเคิลแบบสุ่มมากกว่า SHA256 เนื่องจากปราศจากการโจมตีแบบขยายความยาว