رمز دنباله‌ای
در رمزنگاری، رمز دنباله‌ای یک رمز متقارن است که در آن هر رقم دنباله کلید اجرایی که توسط مولد رمز دنبال‌های تولید شده است، با رقم متناظر در متن اصلی، XOR می‌شود و رقم متناظر متن رمزی را تولید می‌کند. رمزهای دنباله‌ای مزیت‌های گوناگونی دارند که آن‌ها را برای کاربردهای گوناگون مناسب می‌سازد. آن‌ها معمولاً نسبت به رمز قالبی سریع‌تر هستند و پیچیدگی سخت افزاری کمتری دارند.
رمزهای دنباله‌ای می‌توانند به عنوان تقریبی از رمز یکبار مصرف یا رمز ورنام تلقی شوند. رمز یکبار مصرف از یک دنباله کلید اجرایی استفاده می‌کند که ارقام آن کاملاً تصادفی هستند. ارقام دنباله کلید اجرایی با ارقام متن اصلی نظیر به نظیر ترکیب می‌شوند و متن رمز شده را تولید می‌کنند. این سیستم امنیت کامل دارد. اگر چه طول دنباله کلید اجرایی باید حداقل به اندازه طول متن اصلی باشد و همچنین کاملاً به تصادف انتخاب شده باشد. یک رمز دنباله‌ای از دنباله کلید اجرایی کوتاه‌تر و مناسب‌تری مانند دنباله کلید اجرایی ۱۲۸ بیتی استفاده می‌کند. این دنباله کلید به‌طور شبه تصادفی تولید می‌شود. البته یک رمز دنباله‌ای ممکن است ناامن باشد.
یک رمز دنباله‌ای عناصر دنباله کلید اجرایی را بر اساس یک حالت درونی تولید می‌کند. این حالت درونی به دو روش به روز می‌شود:
رمزنگاری جریانی هماهنگ، جریانی از رقم های شبه تصادفی است که مستقل از متن اصلی و متن رمزگذاری شده تولید شده است؛ سپس با متن اصلی (برای رمزگذاری) یا متن رمزگذاری شده (برای رمزگشایی) ترکیب می شود. در متداول ترین حالت، متن رمزگذاری شده از ترکیب رقم های دودویی (بیت ها) متن اصلی و کلید با کمک عمل XOR (یای انحصاری) تولید می شود. به این رمزگذاری جریانی دودویی افزوده گفته می شود. در رمزنگاری جریانی هماهنگ، فرستنده و گیرنده باید دقیقاً در مرحله باشند تا رمزگشایی موفقیت آمیز باشد. اگر در هنگام انتقال رقم ها چیزی اضافه یا کم شود، هماهنگی از بین می رود. برای همگام سازی مجدد، آفست های مختلفی را میتوان برای رسیدن به رمزگشایی درست آزمایش نمود. روش دیگر این است که متن رمزنگاری شده را در نقاط معین در خروجی نشانه گذاری کنیم.
رمزهای دنباله‌ای هماهنگ از N رقم قبلی متن رمزشده برای محاسبه دنباله کلید اجرایی استفاده می‌کنند که ایده آن‌ها در سال ۱۹۴۶ ارائه شده‌است. مثالی از رمزهای دنباله‌ای ناهماهنگ، رمز قالبی در مد CFB است.
رمزهای دنباله‌ای دودویی غالباً با استفاده از ثبات خطی طراحی می‌شوند زیرا آن‌ها به آسانی می‌توانند در سخت افزارها اجرا شوند. استفاده از ثبات‌های خطی به تنهایی امنیت بالایی را تأمین نمی‌کنند. طراحی‌های متنوعی برای بالا بردن امنیت آن‌ها به کار می‌روند.
چون ثبات‌های خطی اساساً خطی هستند، یک روش برای بهبود امنیت آن‌ها استفاده از خروجی چند ثبات خطی موازی به عنوان ورودی یک تابع بولی غیرخطی و تشکیل یک مولد ترکیبی است. از اهداف چنین توابع ترکیبی، تضمین امنیت طرح‌های حاصله مثلاً به منظور پیشگیری از حملات ارتباطی است.
یک مولد فیلتری یک مولد دنباله کلید اجرای برای کاربردهای رمزهای دنباله‌ای است و شامل یک ثبات خطی است که توسط یک تابع غیرخطی فیلتر شده‌است. به عبارت دقیقتر دنباله خروجی یک مولد فیلتری متناظر است با خروجی یک تابع غیرخطی به‌طوری‌که ورودی این تابع از برخی خانه‌های ثبات خطی گرفته شده‌است. برای آنکه دنباله کلید اجرایی ویژگی‌های آماری خوبی داشته باشد، تابع فیلتر باید متوازن باشد (خروجی آن توزیع یکنواخت داشته باشد) و همچنین چندجمله‌ای فیدبک ثبات خطی باید چندجمله‌ای اولیه باشد.
به جای دستگاه با پیاده سازی خطی، ممکن است از یک تابع بروزرسانی غیرخطی استفاده شود. به عنوان مثال، Klimov و Shamir توابع مثلثی (توابع T) را با یک چرخه واحد بر روی کلمات n بیتی پیشنهاد کردند.
برای اینکه یک رمزنگاری جریانی امن باشد، جریان کلید (keystream) آن باید تناوب بزرگی داشته باشد و بازیابی کلید یا بازیابی وضعیت داخلی "رمزگذار از طریق جریان کلید" غیرممکن باشد. رمزنگاران همچنین علاقه‌مند به این هستند که جریان کلید (keystream) عاری از ظریف ترین تمایلات به این باشد که به مهاجمان اجازه "دهد" جریان را از یک رشته نویزهای تصادفی "تمییز" دهند، و همچنین از روابط قابل تشخیص میان "کلیدهای اصلی" که مطابق "با کلیدهای" مرتبط هستند یا موارد مرتبط با نانس رمزنگاری نیز عاری باشد. این موضوع باید برای همه کلیدها صادق باشد (نباید کلیدهای ضعیفی وجود داشته باشد)، حتی اگر مهاجمی بتواند متن اصلی یا متن رمزشده را بفهمد و یا انتخاب کند.
همانند حملات دیگر در رمزنگاری، حملات در رمزنگاری جریانی می‌توانند "گواهی دهنده" باشند، به این معنا که آنها لزوماً روش‌های عملی برای شکستن رمز نیستند، اما نشان می‌دهند که رمز ممکن است نقاط ضعف دیگری داشته باشد.
استفاده‌ی ایمن از رمزنگاری جریانی همزمان، مستلزم این است که هرگز یکبار از همان جریان کلید مجدداً استفاده نشود. این امر به طور کلی به این معناست که یک نانس رمزنگاری متفاوت یا کلید باید به هر فراخوانی از رمز عرضه شود. توسعه دهندگان نرم‌افزار همچنین باید بدانند که اکثر رمزگذارهای جریانی برای ارائه اعتبار هستند و نه "حریم خصوصی ": پیام‌های رمزگذاری شده همچنان ممکن است در جابجایی تغییر کرده‌باشند.
همواره تناوب‌های کوتاه برای رمزگذاری جریانی یک نگرانی جدی بوده است. به عنوان مثال، از رمزگذارهای بلوکی 64 بیتی مانند DES می‌توان برای تولید جریان کلید در حالت بازخورد خروجی (OFB) استفاده کرد. اما، هنگامی که به طور کامل از بازخورد استفاده نمی‌شود، جریان حاصل شده تناوبی حدود 2 بلوک به طور متوسط دارد. برای بسیاری از استفاده‌ها، این تناوب بسیار کم است. به عنوان مثال، اگر رمزگذاری با سرعت 8 مگابایت در ثانیه انجام شود، یک تناوب از دوره بلوک های 2 تایی بعد از حدود نیم ساعت تکرار می شود.
برخی از برنامه‌ها که از رمزنگاری جریانی RC4 استفاده می‌کنند، به دلیل ضعف در روال تنظیم کلید RC4 ممکن است مورد تهاجم قرار بگیرند. برنامه‌های جدید یا باید از RC4 اجتناب کنند یا اطمینان حاصل کنند که همه کلیدها منحصر به فرد و یا مستقل از هم هستند (مانند یک CSPRNG تولید شده خوب یا یک تابع درهم ساز رمزنگاری) و اولین بایت های جریان اصلی دور ریخته می‌شوند.
عناصر رمزنگاری جریانی اغلب برای درک ساده تر از رمزنگاری های بلوکی هستند و بنابراین کمتر احتمال دارد که نقاط ضعف تصادفی یا مخرب پنهان بمانند.