سالسا۲۰ و رمز دیگر نزدیک به آن، ChaCha، رمزهای جریانی هستند که توسط دنیل ج. برنشتاین ساخته شده اند. Salsa20، رمز اصلی، در سال ۲۰۰۵ طراحی شد و مدتی بعد توسط برنشتاین به eSTREAM ارائه داده شد. Chacha نسخه اصلاح شدهی Salsa20 است که در سال ۲۰۰۸ منتشر شده است. این رمز از یک تابع رندکننده جدید استفاده می کند که پراکنش را افزایش می دهد و کارایی ( performance ) را در برخی معماری ها بالا می برد. [ ۳]
هر دو رمز براساس یک تابع شبه تصادفی ساخته شده اند که مبتنی بر عملیات جمع - چرخش - xor ( ARX ) می باشد؛ جمع ۳۲ بیتی، عملیات چرخش و جمع بیت به بیت ( XOR ) . تابع اصلی، یک کلید ۲۵۶ بیتی، یک نانس ۶۴ بیتی و یک شمارنده ۶۴ بیتی را به یک بلوک ۵۱۲ بیتی از کلید جریانی ( key stream ) مپ می کند. ( نسخهی Salsa با کلید ۱۲۸ بیتی نیز وجود دارد ) . این امر به Salsa20 و Chacha این مزیت غیرمعمول را می دهد که کاربر می تواند به هر نقطهای در جریان کلید در زمانی ثابت ( O ( 1 ) ) دست یابد. Salsa20 در پردازنده های مدرن x86، [ ۴] سرعتی در حدود ۴–۱۴ سیکل بر بایت از نظر نرمافزاری و عملکردی معقول از نظر سخت افزاری ارائه می دهد. این اختراع ثبت نشده است و برنشتاین چندین نسخه از نوع مالکیت عمومی بهینه شده برای معماریهای متداول نوشته است. [ ۵]
از نظر ساختار داخلی، این رمز از جمع بیت به بیت یا همان ⊕ ( یای انحصاری ) ، جمع ۳۲ بیتی به پیمانه ⊞و عملیات چرخش با فاصله ثابت ( > > > ) بر روی حالت داخلی شانزده کلمه ۳۲ بیتی استفاده می کند. تنها استفاده از عملیات add - rotate - xor از امکان حمله زمانی در پیاده سازی های نرم افزاری جلوگیری می کند. حالت داخلی از شانزده کلمه ۳۲ بیتی ساخته شده که به عنوان یک ماتریس ۴ × ۴ چیده می شود.
حالت اولیه از ۸ کلمه از کلید، ۲ کلمه از موقعیت جریان، ۲ کلمه از نانس ( در حقیقت بیتهای موقعیت جریان اضافی ) ، و ۴ کلمه ثابت تشکیل شده است:
کلمه های ثابت در اسکی تشکیل عبارت ( "expand 32 - byte k" ) را می دهد. ( برای مثال این چهار کلمه “expa”, “nd 3”, ”2 - by” , “te k” هستند ) . این نمونهای از یک عدد "بدون نیرنگ" است. عملیات اصلی در Salsa20، ربع دور، ( QR ( a, b, c, d است که یک ورودی چهار کلمه ای می گیرد و خروجی ای چهار کلمه ای تولید می کند.
b ^= ( a + d ) < < < 7; c ^= ( b + a ) < < < 9; d ^= ( c + b ) < < < 13; a ^= ( d + c ) < < < 18; دورهای فرد ( QR ( a, b, c, d را روی هریک از ۴ ستون ماتریس ۴ × ۴ و دورهای زوج ( QR ( a, b, c, d را روی هریک از ۴ سطر ماتریس ۴ × ۴ پیاده می کنند. دو دور متوالی ( دور ستون و دور سطر ) را باهم دور دوتایی ( double - round ) می نامند.
این نوشته برگرفته از سایت ویکی پدیا می باشد، اگر نادرست یا توهین آمیز است، لطفا گزارش دهید: گزارش تخلفهر دو رمز براساس یک تابع شبه تصادفی ساخته شده اند که مبتنی بر عملیات جمع - چرخش - xor ( ARX ) می باشد؛ جمع ۳۲ بیتی، عملیات چرخش و جمع بیت به بیت ( XOR ) . تابع اصلی، یک کلید ۲۵۶ بیتی، یک نانس ۶۴ بیتی و یک شمارنده ۶۴ بیتی را به یک بلوک ۵۱۲ بیتی از کلید جریانی ( key stream ) مپ می کند. ( نسخهی Salsa با کلید ۱۲۸ بیتی نیز وجود دارد ) . این امر به Salsa20 و Chacha این مزیت غیرمعمول را می دهد که کاربر می تواند به هر نقطهای در جریان کلید در زمانی ثابت ( O ( 1 ) ) دست یابد. Salsa20 در پردازنده های مدرن x86، [ ۴] سرعتی در حدود ۴–۱۴ سیکل بر بایت از نظر نرمافزاری و عملکردی معقول از نظر سخت افزاری ارائه می دهد. این اختراع ثبت نشده است و برنشتاین چندین نسخه از نوع مالکیت عمومی بهینه شده برای معماریهای متداول نوشته است. [ ۵]
از نظر ساختار داخلی، این رمز از جمع بیت به بیت یا همان ⊕ ( یای انحصاری ) ، جمع ۳۲ بیتی به پیمانه ⊞و عملیات چرخش با فاصله ثابت ( > > > ) بر روی حالت داخلی شانزده کلمه ۳۲ بیتی استفاده می کند. تنها استفاده از عملیات add - rotate - xor از امکان حمله زمانی در پیاده سازی های نرم افزاری جلوگیری می کند. حالت داخلی از شانزده کلمه ۳۲ بیتی ساخته شده که به عنوان یک ماتریس ۴ × ۴ چیده می شود.
حالت اولیه از ۸ کلمه از کلید، ۲ کلمه از موقعیت جریان، ۲ کلمه از نانس ( در حقیقت بیتهای موقعیت جریان اضافی ) ، و ۴ کلمه ثابت تشکیل شده است:
کلمه های ثابت در اسکی تشکیل عبارت ( "expand 32 - byte k" ) را می دهد. ( برای مثال این چهار کلمه “expa”, “nd 3”, ”2 - by” , “te k” هستند ) . این نمونهای از یک عدد "بدون نیرنگ" است. عملیات اصلی در Salsa20، ربع دور، ( QR ( a, b, c, d است که یک ورودی چهار کلمه ای می گیرد و خروجی ای چهار کلمه ای تولید می کند.
b ^= ( a + d ) < < < 7; c ^= ( b + a ) < < < 9; d ^= ( c + b ) < < < 13; a ^= ( d + c ) < < < 18; دورهای فرد ( QR ( a, b, c, d را روی هریک از ۴ ستون ماتریس ۴ × ۴ و دورهای زوج ( QR ( a, b, c, d را روی هریک از ۴ سطر ماتریس ۴ × ۴ پیاده می کنند. دو دور متوالی ( دور ستون و دور سطر ) را باهم دور دوتایی ( double - round ) می نامند.
wiki: سالسا۲۰