موضوع مقاله: سالسا۲۰ | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # سالسا۲۰ | مقدمه: هر دو رمز براساس یک تابع شبه تصادفی ساخته شده‌اند که مبتنی بر عملیات جمع-چرخش-xor (ARX)می‌باشد؛ جمع ۳۲ بیتی، عملیات چرخش و جمع بیت به بیت (XOR). | ## بخش 1: سالسا۲۰ | تابع اصلی، یک کلید ۲۵۶ بیتی، یک نانس ۶۴ بیتی و یک شمارنده ۶۴ بیتی را به یک بلوک ۵۱۲ بیتی از کلید جریانی (key stream) مپ می‌کند. Salsa20 در پردازنده‌های مدرن x86، سرعتی در حدود ۴–۱۴ سیکل بر بایت از نظر نرمافزاری و عملکردی معقول از نظر سخت‌افزاری ارائه می‌دهد. این اختراع ثبت نشده‌است و برنشتاین چندین نسخه از نوع مالکیت عمومی بهینه شده برای معماریهای متداول نوشته‌است. ساختار از نظر ساختار داخلی، این رمز از جمع بیت به بیت یا همان ⊕ (یای انحصاری)، جمع ۳۲ بیتی به پیمانه ⊞و عملیات چرخش با فاصله ثابت(>>>) بر روی حالت داخلی شانزده کلمه ۳۲ بیتی استفاده می‌کند. حالت داخلی از شانزده کلمه ۳۲ بیتی ساخته شده که به عنوان یک ماتریس ۴ × ۴ چیده می‌شود. ۳۲۱۰۷۶۵۴۱۱۱۰۹۸۱۵۱۴۱۳۱۲ حالت اولیه از ۸ کلمه از کلید، ۲ کلمه از موقعیت جریان، ۲ کلمه از نانس (در حقیقت بیتهای موقعیت جریان اضافی)، و ۴ کلمه ثابت تشکیل شده‌است: +حالت اولیه Salsa20کلیدکلیدکلید نانسنانس کلیدکلید موقعیتموقعیت کلیدکلیدکلید کلمه‌های ثابت در اسکی تشکیل عبارت ("expand 32-byte k") را می‌دهد. به عبارت دیگر، اعمال عملیات معکوس ماتریس ۴ × ۴ اصلی را تولید خواهد کرد، که شامل کلید می‌شود. با این حال، انواع دیگر آن با دورهای کاسته شده به نام‌های Salsa20/8 و Salsa20/12 که به ترتیب از ۸ و ۱۲ دور استفاده می‌کنند هم معرفی شده‌اند. این گونه‌ها برای تکمیل Salsa20 اصلی معرفی شدند و نه برای جایگیزینی آن و برای آن که عملکرد حتی بهتریاز آن جا عمدهٔ کار شامل اجرای دورهای تکراری می‌شود، تعداد دورها با عملکرد نسبت معکوس دارد. | ## بخش 2: سالسا۲۰ | XSalsa20 کلید و ۱۲۸ بیت اول نانس را در یک بلوک Salsa20 تغذیه می‌کند (بدون جمع نهایی، که ممکن است حذف شود یا پس از یک بلوک استاندارد Salsa20 کم شود) و از ۲۵۶ بیت خروجی به عنوان کلید برای Salsa20 استاندارد با استفاده از ۶۴ بیت آخر نانس و موقعیت جریان استفاده می‌کند. به‌طور خاص، ۲۵۶ بیت خروجی استفاده شده بیت‌های متناظر با قسمت‌های غیر مخفی ورودی است: اندیس‌های ۰، ۵، ۱۰، ۱۵، ۶، ۷، ۸ و ۹. یک رمزنگاری از Salsa20 را اعلام کردند که ۸ تا از ۲۰ دور را می‌شکند تا کلید مخفی ۲۵۶ بیتی را در 2255 عملیات، با استفاده از 211.37 جفت ihd جریان کلید بازیابی کند. با این حال، به نظر نمی‌رسد که این حمله بتواند با حملهٔ جستجوی فراگیر رقابتی کند. این حمله مفهوم جدید بیت‌های کلید خنثی احتمالی برای تشخیص احتمالی دیفرانسیلی کوتاه شده را بکار می‌بندد. این حمله می‌تواند برای به گونه ای تطبیق داده شود تا Salsa20/7 را با کلید ۱۲۸ بیتی بشکند. (به‌طور خاص، هیچ ویژگی دیفرانسیلی با احتمال بالاتر ا−130۲ ندارد، بنابراین رمزنگاری دیفرانسیلی دشوارتر از فرسودگی کلیدی ۱۲۸ بیتی است) گونهٔ ChaCha در سال 2008، برنشتاین خانواده رمزهای نزدیک "ChaCha" را منتشر کرد، که هدف آنها افزایش نسبت پراکنش بر هر دور در عین رسیدن به کارایی یکسان یا کمی بهتر است. به‌طور متوسط، پس از تغییر ۱ بیت از ورودی، ربع دور Salsa20، تعداد ۸ بیت خروجی را تغییر خواهد داد در حالی که ChaCha تعداد ۱۲٫۵ بیت خروجی را تغییر می‌دهد. تعداد جمع‌ها، xorها و چرخش‌های بیتی در ربع دور ChaCha با ربع دور Salsa20 یکسان است ولی این واقعیت که دوتا از چرخش‌ها از مضارب ۸ هستند، باعث می‌شود که بهینه‌سازی کوچکی در برخی از معماری‌ها از جمله x86 انجام شود. | ## بخش 3: سالسا۲۰ | علاوه بر این، قالب بندی ورودی به گونه ای دوباره تنظیم شده‌است تا از یک بهینه‌سازی اجرای کارآمد از SSE که برای Salsa20 کشف شده، پشتیبانی کند. به جای اینکه دورها بین ستون‌ها و ردیف‌ها متناوب باشد، بین ستون‌ها و در امتداد قطرهای مورب اجرا می‌شوند. این رمز همچنین با استفاده از شانزده کلمه ۶۴ بیتی (۱۰۲۴ بیت حالت)، گونه ای را با ثابت‌های چرخش تنظیم شدهی مطابق تعریف می‌کند. برای تشکیل یک بلوک ورودی ChaCha از کلید و ۱۲۸ بیت اول نانس (کلمه‌های ۱۲ تا ۱۵ ورودی) استفاده کنید (با حذف جمع نهایی). کلمه‌های ۰–۳ و ۱۲–۱۵ (کلمات مرتبط با کلمات غیرکلیدی ورودی) را تولید و استخراج کنید سپس کلید قابل استفاده برای ChaCha معمولی را تشکیل دهید (با استفاده از ۶۴ بیت آخر نانس و ۶۴ بیت بلوک شمارنده) به کار گرفته شدن ChaCha20 گوگل ChaCha20 را به همراه کد تصدیق پیام Poly1305 برنشتاین به عنوان جایگزینی برای RC4 در TLS، که برای امنیت اینترنت استفاده می‌شود ، انتخاب کرده‌است. پیاده‌سازی IETF الگوریتم منتشر شده برنشتاین را با تغییر نانس ۶۴ بیتی و بلوک شمارنده ۶۴ بیتی به نانس ۹۶ بیتی و بلوک شمارنده ۳۲ بیتی اصلاح کرده‌است؛ هنگامی که الگوریتم اصلاح شد نام آن تغییر نکرد زیرا از نظر رمزنگاری بی‌اهمیت است (هر دو چیزی را تشکیل می‌دهند به عنوان نانس ۱۲۸ بیتی خواهد شناخت) اما تغییر رابط می‌تواند منبعی برای سردرگمی توسعه دهندگان باشد. به دلیل بلوک شمارنده کاسته شده، حداکثر طول پیامی که می‌تواند با امنیت توسط نوع IETF رمزگذاری شود 232 بلوک ۶۴ بایتی (۲۵۶ GiB) است. | ## جمع‌بندی | برای برنامه‌هایی که این کافی نیست، مانند رمزگذاری فایل یا دیسک، استفاده از الگوریتم اصلی با نانس ۶۴ بیتی را پیشنهاد می‌کند.