تریویوم (سایفر)

چپ|بندانگشتی|316x316پیکسل| ساختار Trivium
**تریویوم** یک رمز جریانی همزمان است که به منظور ایجاد یک مبادله انعطاف‌پذیر بین سرعت و تعداد درگاه در سخت‌افزار، و اجرای کارآمد و منطقی نرم‌افزار طراحی شده‌است.

تریویوم توسط نویسندگان آن، Christophe De Cannière و Bart Preneel، به سخت‌افزار مربوط به مسابقه eSTREAM ارسال شد و توسط پروژه eSTREAM به عنوان بخشی از پورتفولیو برای رمزهای سخت‌افزاری سطح پایین (Profile 2) انتخاب شد. تریویوم به عنوان استاندارد بین‌المللی ISO / IEC 29192-3 شناخته شده اما هنوز ثبت اختراع نشده‌است.

تریویوم از یک کلید ۸۰ بیتی و یک IV 80 بیتی حداکثر 2 64 بیت خروجی تولید می‌کند. این ساده‌ترین داوطلب eSTREAM است. در حالی به دلیل سادگی کارکردش، مقاومت چشمگیری در برابر آنالیز رمز نشان می‌دهد، حملات اخیر حاشیه امنیتی را باریک‌تر نشان می‌دهند.

## شرح
استیت داخلی ۲۸۸ بیتی تریویوم شامل سه رجیستر شیفت با طول‌های مختلف است. در هر دور، یک بیت با استفاده از ترکیبی غیرخطی به یکی از این سه رجیستر منتقل شده و یک بیت از خروجی تولید می‌شود. برای مقدار دهی اولیه رمز، کلید و IV در دوتا از این شیفت رجیسترها نوشته می‌شوند. حالت رمزگذاری 4 &#xD7; ۲۸۸ = ۱۱۵۲ بار به روز می‌شود؛ به طوری که هر مقدار از استیت داخلی، به روشی غیرخطی و پیچیده، به تمام بیت‌های کلید و IV وابستگی دارد.

در ۶۵ بیت اول هر کدام از رجیسترهای شیفت، ضربه ای ظاهر نمی‌شود؛ بنابراین هر بیت حالت جدید تا حداقل ۶۵ دور پس از تولید استفاده نمی‌شود. این، کلید عملکرد نرم‌افزار Trivium و انعطاف‌پذیری آن در سخت‌افزار است.

## مشخصات
Trivium می‌تواند با استفاده از سه معادله بازگشتی بسیار مختصر مشخص شود. هر متغیر عنصری از GF (2) است. آنها می‌توانند به صورت بیت، با "+" به معنی XOR و "•" به معنی AND تعریف شوند.
* *a<sub>i</sub>* = *c<sub>i</sub>*−66 + *c<sub>i</sub>*−111 + *c<sub>i</sub>*−110 • *c<sub>i</sub>*−109 + *a<sub>i</sub>*−69
* *b<sub>i</sub>* = *a<sub>i</sub>*−66 + *a<sub>i</sub>*−93 + *a<sub>i</sub>*−92 • *a<sub>i</sub>*−91 + *b<sub>i</sub>*−78
* *c<sub>i</sub>* = *b<sub>i</sub>*−69 + *b<sub>i</sub>*−84 + *b<sub>i</sub>*−83 • *b<sub>i</sub>*−82 + *c<sub>i</sub>*−87

بیت‌های خروجی *r* 0 … *r* 2 64 − 1 توسط عبارت زیر تولید می‌شوند:
* *r<sub>i</sub>* = *c<sub>i</sub>*−66 + *c<sub>i</sub>*−111 + *a<sub>i</sub>*−66 + *a<sub>i</sub>*−93 + *b<sub>i</sub>*−69 + *b<sub>i</sub>*−84

با توجه به کلید ۸۰ بیتی *k* 0 … *k* 79 و آی وی l بیتی *v*0 … *v<sub>l</sub>*−۱ (به صورتی که ۰ ≤ *l* ≤ ۸۰)، تریویوم به صورت زیر مقداردهی اولیه می‌شود:
* (*a*−1245 … *a*−1153) = (۰, ۰ … 0, *k*0 … *k*79)
* (*b*−1236 … *b*−1153) = (۰, ۰ … 0, *v*0 … *v<sub>l</sub>*−1)
* (*c*−1263 … *c*−1153) = (۱, ۱, ۱, ۰, ۰ … ۰)

جهت مپ کردن جریانی از بیت‌های *r* به جریانی از بایت‌های *R*، از روش little-endian استفاده می‌کنیم:

*R* *i* = Σ *j* = ۰ … 7 2 j *r* 8 *i* + j

## کارایی
پیاده‌سازی مستقیم سخت‌افزار Trivium از ۳۴۸۸ درگاه منطقی استفاده می‌کند و در هر کلاک یک بیت تولید می‌کند. با این حال، از آنجا که هر بیت حالت حداقل تا ۶۴ دور استفاده نمی‌شود، ۶۴ بیت حالت می‌تواند به‌طور موازی و با هزینه سخت‌افزاری کمتری تولید شود. مبادلات متفاوتی نیز بین سرعت و مساحت امکان‌پذیر خواهد بود.

همین ویژگی امکان پیاده‌سازی کارآمدو پر بازده نرم‌افزار را فراهم می‌کند. تست کارایی انجام شده توسط eSTREAM به سرعت رمزگذاری انبوه، در حدود 4 cycles/byte در برخی پلتفرم‌های x86 می‌پردازد، که به خوبی با 19 cycles/byte اجرای مرجع AES در همان پلتفرم مقایسه می‌شود.

## امنیت
, no cryptanalytic attacks better than brute-force attack are known, but several attacks come close. The cube attack requires 268 steps to break a variant of Trivium where the number of initialization rounds is reduced to 799. Previously other authors speculate that these techniques could lead to a break for 1100 initialisation rounds, or "maybe even the original cipher". This builds on an attack due to Michael Vielhaber that breaks 576 initialization rounds in only 212.3 steps.

## منابع

## پیوند به بیرون
* صفحه eSTREAM در Trivium
* اجرای eSTREAM 
رده:رمز دنباله‌ای