شرکت Trail of Bits ابزارهای جدیدی به نام SequenceHash و SequenceMAC را معرفی کرده است. این دو ساختار با هدف فراهم کردن یک روش امن برای Multihashing (هش کردن مجموعهای از مقادیر در کنار یکدیگر) طراحی شدهاند تا توسعهدهندگان بتوانند از حملاتی که از ابهام در کدگذاری ورودیها (Input Encoding) بهره میبرند، جلوگیری کنند.
چالش Multihashing و ریسکهای امنیتی
در بسیاری از پروتکلهای رمزنگاری، نیاز است که چندین مقدار (مانند X, Y, Z) با هم هش شوند. روش سادهی الحاق (Concatenation) این مقادیر و سپس هش کردن آنها، منجر به یک مشکل امنیتی جدی میشود. برای مثال، اگر ورودیهای “Test 0” و “Test 1” را الحاق کنیم، نتیجه با ورودی واحد “Test 0Test 1” یکسان خواهد بود. این ابهام در مرز بین ورودیها میتواند منجر به جعل (Forgery) در اثباتهای Zero-Knowledge و بهویژه در تبدیلهای Fiat-Shamir شود که در ارزهای دیجیتال کاربرد گستردهای دارند.
ویژگیهای کلیدی SequenceHash
برخلاف TupleHash که تنها با Keccak سازگار است، SequenceHash مستقل از تابع هش (Hash-agnostic) است و با توابع رایجی مانند SHA256، SHA512، BLAKE و RIPEMD سازگاری دارد. ویژگیهای اصلی آن عبارتند از:
- کدگذاری بدون ابهام: تضمین میکند که هر توالی از ورودیها، خروجی متفاوتی نسبت به هر ترکیب دیگر داشته باشد (Semantic Distinction).
- جلوگیری از Length-extension: با استفاده از ساختار Double-hash، جلوی حملات افزایش طول را در توابعی مانند SHA256 میگیرد.
- رشتههای سفارشیسازی (Customization Strings): امکان جداسازی دامنه (Domain Separation) را فراهم میکند تا یک مقدار واحد در زمینههای مختلف، خروجیهای متفاوتی داشته باشد.
SequenceMAC: نسخه کلیددار
علاوه بر هشینگ، SequenceMAC به عنوان یک ساختار MAC (پیام تایید کد) معرفی شده است. این ابزار مشابه HMAC عمل میکند اما با رفع نقاط ضعف آن؛ به طور خاص، مشکل Key Pseudocollisions (برخورد کاذب کلیدها) را با گنجاندن طول کلید در بلوک هدر حل کرده است. حداقل طول کلید در SequenceMAC برابر با ۳۲ بایت است.
پیادهسازی و دسترسی
این مشخصات اکنون بخشی از پروژه C2SP (پروژه مشخصات رمزنگاری جامعه) است. برای تسهیل پذیرش، پیادهسازیهای آماده در زبانهای Rust، Go و Python منتشر شده و مجموعهای از Test Vectors برای اعتبارسنجی پیادهسازیهای شخصی ارائه شده است.