یک '''کد افزونگی دوره ایدورهای''' {{انگلیسی|Cyclic redundancy code}} (سیآرسی) تابع درهمسازی غیرایمنی است که جهت تشخیص تغییرات تصادفی بر روی دادههای خام طراحی شدهاست. این تابع عموماً در شبکههای مخابراتی دیجیتال و وسایل ذخیرهسازی دادهها از جمله دیسک سخت مورد استفاده قرار میگیرد. یک دستگاه دارای قابلیت سیآرسی، یک توالی کوتاه و با طول ثابت را، به نام ''کد سیآرسی'' (یا فقط ''سیآرسی'')، برای هر بلاک از دادهها محاسبه نموده و آن را همراه با دادهها ذخیره یا ارسال میکند. زمانی که یک بلاک دریافت یا خوانده میشود دستگاه محاسبه را تکرار میکند؛ در صورت مغایرت با کد محاسبه شده قبلی مشخص میشود که این بلاک دارای ''خطای داده'' است و در این حالت دستگاه ممکن است عملی را جهت اصلاح خطا از جمله خواندن یا درخواست ارسال مجدد بلاک انجام دهد. اصطلاح سیآرسی میتواند به کد اعتبارسنج یا تابع تولید کد اطلاق شود. سیآرسیها به جهت پیادهسازی ساده در سختافزار دودویی، سادگی تحلیل ریاضی آنها و عملکرد خوب در تشخیص خطاهای معمول حاصل از اختلال در کانالهای انتقال دارای محبوبیت زیادی هستند. سیآرسی توسط W. Wesley Peterson اختراع و در مقاله ۱۹۶۱ وی منتشر شد.<ref name="PetersonBrown1961">{{یادکرد|فصل=|کتاب=|ناشر= |چاپ= |شهر= |کوشش= |ویرایش= |سال=|شابک=|نویسنده= Peterson, W. Wesley. ; Brown, D. T.|نویسندگان سایر بخشها=|ترجمه=|صفحه=228 |زبان=en |مقاله= Cyclic Codes for Error Detection |ژورنال= Proceedings of the IRE |نشریه=|تاریخ= {{{day}}} January {{چر}}1961 |دوره=49 |شماره= |شاپا=}}</ref> سیآرسی ۳۲ بیتی (CRC32) پیشنهادی مؤسسه مهندسین الکتریک و الکترونیک (IEEE)، که در اترنت و سایر جاها استفاده شدهاست، در کنفرانس مخابراتی سال ۱۹۷۵ ظاهر شد.
{{یادکرد|فصل=|کتاب=|ناشر= |چاپ= |شهر= |کوشش= |ویرایش= |سال=|شابک=|نویسنده= Peterson, W. Wesley. ; Brown, D. T.|نویسندگان سایر بخشها=|ترجمه=|صفحه=228 |زبان=en |مقاله= Cyclic Codes for Error Detection |ژورنال= Proceedings of the IRE |نشریه=|تاریخ= {{{day}}} January {{چر}}1961 |دوره=49 |شماره= |شاپا=}}</ref> سیآرسی ۳۲ بیتی (CRC32) پیشنهادی موسسه مهندسین الکتریک و الکترونیک (IEEE)، که در اترنت و سایر جاها استفاده شدهاست، در کنفرانس مخابراتی سال ۱۹۷۵ ظاهر شد.
== مقدمه ==
اگرچه سیآرسیها میتوانند با استفاده از هر میدان محدودی ساخته شوند، همه سیآرسیهای پرکاربرد از میدان محدود <span dir="ltr">GF(2)</span> بهره میبرند. این میدانی از دو عنصر، عموماً به نام ۰ و ۱، است که به راحتی با معماری کامپیوتر سازگار است.
یک دلیل مهم برای محبوبیت سیآرسیها برای تشخیص تغییرات تصادفی دادهها اطمینان از کیفیت آنها است. نوعاً، یک سیآرسی nبیتی، که برای یک بلاک داده با طول دلخواه محاسبه شدهاست، هر حوزه خطای با طول کمتر از n بیت (به عبارت دیگر، هر تغییری که محدوده آن بیش از n بیت مجاور از دادهها نباشد) و <span dir="ltr">۱-۲۱–۲<sup> -n</sup></span> تعداد از سایر حوزههای با طول بیش از n بیت را تشخیص میدهد. خطاها در هیچیک از کانالهای انتقال و رسانههای ذخیرهسازی مغناطیسی دارای توزیع تصادفی نیستند و در نتیجه فایده خواص سیآرسیها را نسبت به سایر روشهای تشخیص خطا از جمله کدهای چندگانه زوجیت بیشتر میکنند.
سادهترین سامانه تشخیص خطا، بیت زوجیت، در واقع یک سیآرسی عادی است که از مقسوم علیه دوبیتی ۱۱ استفاده میکند.
سیآرسیها، به خودی خود، راهکار مناسبی برای حفاظت در مقابل تغییرات عمدی روی داده نیستند (مثلاً در برنامههای اعتبارسنجی)، چون مبانی ساده ریاضیات آنها باعث میشود که بتوان هر تغییر دلخواه را روی دادهها طوری اعمال کرد که سیآرسی دادهها تغییر نکند.
اغلب این فرض غلط وجود دارد که وقتی پیامی به همراه سیآرسی آن از یک کانال آزاد دریافت میشود و سیآرسی دریافتی با سیآرسی محاسبه شده مطابقت میکند پس پیام ممکن نیست در حین دریافت تغییر کرده باشد. این درست نیست چون هر دوی آنها میتوانند تغییر کرده باشند، به طوری که سیآرسی جدید با پیام جدید مطابقت کند.کند؛ بنابراین سیآرسیها میتوانند جهت بررسی درستی دادهها استفاده شوند ولی نه برای اطمینان از تمامیت آن.
ایجاد پیامهای دیگری که همان سیآرسی را ایجاد کنند کار سادهای است، خصوصاً پیامهایی که بسیار شبیه پیام اصلی هستند. طبق طراحی پیامی که بسیار شبیه پیام اصلی است (و تفاوت آن تنها در یک الگوی تداخل تصادفی است) سیآرسی کاملاً متفاوتی خواهد داشت و بنابراین تشخیص داده خواهد شد.
<pre>
11010011101100۱۱۰۱۰۰۱۱۱۰۱۱۰۰ <--- ورودی
1011۱۰۱۱ <--- مقسوم علیه (۴ بیت)
----
01100011101100۰۱۱۰۰۰۱۱۱۰۱۱۰۰ <--- نتیجه
</pre>
اگر سمت چپ ترینچپترین بیت ورودی بالای مقسوم علیه صفر باشد، محاسبهای انجام نشده و مقسوم علیه را یک بیت به راست حرکت میدهیم. اگر سمت چپ ترینچپترین بیت ورودی بالای مقسوم علیه یک باشد، مقسوم علیه و ورودی XOR میشوند (به بیان دیگر بیت ورودی بالای هر بیت یک مقسوم علیه عکس میشود). سپس مقسوم علیه را یک بیت به راست حرکت میدهیم و این روند تا زمانی تکرار میشود که انتهای مقسوم علیه به انتهای سطر ورودی نرسیدهاست. در زیر، آخرین محاسبه نشان داده شدهاست:
<pre>
00000000001110۰۰۰۰۰۰۰۰۰۰۱۱۱۰ <--- نتیجه محاسبه قبلی
1011 ۱۰۱۱ <--- مقسوم علیه
----
00000000000101۰۰۰۰۰۰۰۰۰۰۰۱۰۱ <--- باقیمانده (۳ بیت)
</pre>
== سیآرسیهای پرکاربرد و استانده ==
اگرچه سیآرسیها از اجزای استاندههای متعددی هستند اما خودشان، از منظر وجود الگوریتمی جهانی، استانده نیستند. به عنوان مثال دو چندجملهای سیآرسی-۱۲۱۲،<ref name=slib>{{یادکرد|فصل=|کتاب=|ناشر= |چاپ= |شهر= |کوشش= |ویرایش= |سال=|شابک=|نویسنده= |نویسندگان سایر بخشها=|ترجمه=|صفحه= |زبان=en |مقاله= [http://os.cqu.edu.au/cgi-bin/info/info2html.cgi?(slib)Cyclic%20Checksum (slib) Cyclic Checksum] |ژورنال= |نشریه= |تاریخ= |دوره= |شماره= |شاپا=}} Retrieved on 6 April 2008.</ref>، ده نوع مستند سیآرسی-۱۶ و چهار سیآرسی-۳۲ وجود دارد. این چندجملهایها عموماً بهترین چندجملهایهای ممکن نیستند. بین ۱۹۹۳ و ۲۰۰۴، کوپمن، کستاگنولی و سایرین فضای چندجملهایها تا ۱۶ بیت، ۲۴ و ۳۲ بیتی را جهت یافتن مثالهایی با کارایی بهتر (از نظر فاصله هامنی برای یک طول پیام خاص) از چندجملهایهای پروتکلهای پیشین بررسی کردند و بهترین آنها را در جهت بهبود ظرفیت تشخیص خطای استاندههای آتی منتشر کردند. به طور خاص، iSCSI یکی از یافتههای این پژوهش را مورد استفاده قرار دادهاست.
جدول زیر تنها شامل چندجملهایهای مورد استفاده در الگوریتمهای متداول است. همانطورهمانطور که پیشتر توضیح داده شد هر پروتکل خاص میتواند دارای چینشهای بیت مختلفی باشد. سیآرسیها در پروتکلهای تجاری ممکن است از مقدار اولیه خاص و XOR نهایی جهت مبهمسازی استفاده کنند ولی این کار استحکام رمزنگاری الگوریتم را افزایش نمیدهد.
''توجه: در این جدول باازرشترین بیت حذف شده است؛ جهت توضیح به قسمت مشخصات سیآرسی در بالا مراجعه کنید. ''
|-
|CRC-1 || <math>x + 1</math> (اغلب در سختافزار؛ و همچنین معروف به ''بیت زوجیت'') || 0<span dir="ltr">x1 or 0x1 (0x1)</span>
|-
|CRC-4-ITU || <math>x^4 + x + 1</math> (ITU [http://www.itu.int/rec/T-REC-G.704-199810-I/en G.704۷۰۴]، صفحه ۱۲) || <span dir="ltr">0x3 or 0xC (0x9)</span>
|-
|CRC-5-EPC || <math>x^5 + x^3 + 1</math> (RFID نسل دوم<ref name="gen-2-spec">{{یادکرد|فصل=|کتاب=|ناشر= EPCglobal |چاپ= |شهر= |کوشش= |ویرایش= |سال=|شابک=|نویسنده= |نویسندگان سایر بخشها=|ترجمه=|صفحه=۱۰۸ ۳۵ |زبان=en |مقاله= [http://www.epcglobalinc.org/standards/uhfc1g2/uhfc1g2_1_0_9-standard-20050126.pdf Class-1 Generation-2 UHF RFID Protocol] |ژورنال= |نشریه=|تاریخ=23 October 2008 |دوره= |شماره= |شاپا= }}</ref>) || <span dir="ltr">0x09 or 0x12 (0x14)</span>
|-
|CRC-5-ITU || <math>x^5 + x^4 + x^2 + 1</math> (ITU [http://www.itu.int/rec/T-REC-G.704-199810-I/en G.704۷۰۴]، صفحه ۹) || <span dir="ltr">0x15 or 0x15 (0x1A)</span>
|-
|-
|CRC-6-ITU || <math>x^6 + x + 1</math> (ITU [http://www.itu.int/rec/T-REC-G.704-199810-I/en G.704۷۰۴]، صفحه ۳) || <span dir="ltr">0x03 or 0x30 (0x21)</span>
|-
|-
|CRC-16-CCITT || <math>x^{16} + x^{12} + x^5 + 1</math> (سرآیندهای G.hn PHY, 802.15.4, X.25, V.41, CDMA, [[بلوتوث]],، XMODEM, HDLC,PPP, IrDA, BACnet؛ معروف به ''CRC-CCITT'', MMC, SD) || <span dir="ltr">0x1021 or 0x8408 (0x8810)</span>
|-
|-
|CRC-32Q || <math>x^{32} + x^{31} + x^{24} + x^{22} + x^{16} + x^{14} + x^{8} + x^{7} + x^{5} + x^{3} + x + 1</math> (aviation; AIXM <ref name="aixm-primer">{{یادکرد|فصل=|کتاب=|ناشر= European Organisation for the Safety of Air Navigation |چاپ= |شهر= |کوشش= |ویرایش= |سال=|شابک=|نویسنده= |نویسندگان سایر بخشها=|ترجمه=|صفحه= |زبان=en |مقاله= [http://www.eurocontrol.int/aim/gallery/content/public/aicm_aixm_4_5/aixm_primer/AIXM_Primer_4.5.pdf AIXM Primer] |ژورنال= |نشریه=|تاریخ=20 March 2006 |دوره= |شماره= |شاپا= }}</ref>) || <span dir="ltr">0x814141AB or 0xD5828281 (0xC0A0A0D5)</span>
|-
== پیوند به بیرون ==
* [http://alirabiee.com/redir.php?id=2 Free CRC-۸8 Checksum Calculator]: یک پیادهسازی متن باز محاسبه سیآرسی-۸ در زبان اسمبلی
=== ابزارهای برخط ===
* [http://www.think-silicon.com/ipgenius.php?module=CRC_generator مولد رایگان مدار سیآرسی وریلاگ]
* [http://textop.us/Hashing/CRC محاسبه آنلاین سیآرسی۳۲ و سیآرسی۳۲بیتی (با استفاده از چندجملهای IEEE ۸۰۲.۳۸۰۲٫۳)]
* [http://serversniff.net/crypt-checksum.php ابزاری برای محاسبه سیآرسیهای معمول (۸/۱۶/۳۲/۶۴) از روی رشتهها]
* [http://www.paulschou.com/tools/xlate/ کدگشا و کدنگار کاراکتر (ASCII)، مبنای ۱۶، دودویی، مبنای ۶۴، غیره... به همراه الگوریتمهای درهمسازی MD2، MD4، MD5، SHA1+2، CRC، غیره]
|