Научная статья на тему 'Исследование реализаций алгоритмов контрольной суммы CRC32'

Исследование реализаций алгоритмов контрольной суммы CRC32 Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
771
93
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
CRC КОД / КОНТРОЛЬНАЯ СУММА / ПОРОЖДАЮЩИЙ ПОЛИНОМ / ОБНАРУЖЕНИЕ ОШИБОК / АЛГОРИТМЫ / CRC CODE / CHECKSUM / GENERATING POLYNOMIAL / ERROR DETECTION / ALGORITHMS

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Клименко С.В., Яковлев В.В., Благовещенская Е.А.

Аннотация Цель: Дать сравнительную оценку основных способов формирования контрольной суммы (CRC кода) на основе прямого, табличного и матричного алгоритмов. Методы: Алгоритмы сравнивались с помощью математических методов, для достижения результата использовано программное обеспечение Java Development Kit версии 1.8 и среда разработки NetBeans IDE 8.2. Результаты: Подробно описаны способы формирования контрольных сумм при помощи алгоритмов. Для каждого рассматриваемого способа приведены временные характеристики их работы. Проведено сравнение анализируемых способов. Практическая значимость: По полученным результатам эксперимента сделан вывод, какой способ оптимален для формирования контрольных сумм.

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Клименко С.В., Яковлев В.В., Благовещенская Е.А.

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

THE STUDY OF IMPLEMENTATIONS OF CRC32 ALGORITHMS

Summary Objective: To give comparative assessment of the basic ways of generating a checksum (CRC code) based on direct, table and matrix algorithms. Methods: Algorithms were compared by means of mathematical methods. In order to achieve the result Java Development Kit software version 1.8 and NetBeans IDE 8.2 development environment were used. Results: The methods of generating checksums by means of algorithms were described in detail. For each method under consideration, the time characteristics of their work were given. The comparison of the analyzed methods was conducted. Practical importance: Based on the results of the experiment, it was concluded which method was optimal for the generation of checksums.

Текст научной работы на тему «Исследование реализаций алгоритмов контрольной суммы CRC32»

УДК 004.056.2

С. В. Клименко, В. В. Яковлев, Е. А. Благовещенская

ИССЛЕДОВАНИЕ РЕАЛИЗАЦИЙ АЛГОРИТМОВ КОНТРОЛЬНОЙ СУММЫ CRC32

Дата поступления: 23.04.2018 Решение о публикации: 28.05.2018

Аннотация

Цель: Дать сравнительную оценку основных способов формирования контрольной суммы (CRC кода) на основе прямого, табличного и матричного алгоритмов. Методы: Алгоритмы сравнивались с помощью математических методов, для достижения результата использовано программное обеспечение Java Development Kit версии 1.8 и среда разработки NetBeans IDE 8.2. Результаты: Подробно описаны способы формирования контрольных сумм при помощи алгоритмов. Для каждого рассматриваемого способа приведены временные характеристики их работы. Проведено сравнение анализируемых способов. Практическая значимость: По полученным результатам эксперимента сделан вывод, какой способ оптимален для формирования контрольных сумм.

Ключевые слова: CRC код, контрольная сумма, порождающий полином, обнаружение ошибок, алгоритмы.

*Sergey V. Klimenko, postgraduate student, s.klimenko@live.ru; Valentin V. Yakovlev, D. Eng. Sci., professor, jakovlev@pgups.ru; Yekaterina A. Blagoveshchenskaya, D. Phys. and Math. Sci., professor, head of chair, vmkaf@pgups.ru (Emperor Alexander I Petersburg State Transport University) THE STUDY OF IMPLEMENTATIONS OF CRC32 ALGORITHMS

Summary

Objective: To give comparative assessment of the basic ways of generating a checksum (CRC code) based on direct, table and matrix algorithms. Methods: Algorithms were compared by means of mathematical methods. In order to achieve the result Java Development Kit software version 1.8 and NetBeans IDE 8.2 development environment were used. Results: The methods of generating checksums by means of algorithms were described in detail. For each method under consideration, the time characteristics of their work were given. The comparison of the analyzed methods was conducted. Practical importance: Based on the results of the experiment, it was concluded which method was optimal for the generation of checksums.

Keywords: CRC code, checksum, generating polynomial, error detection, algorithms.

Введение

Методы обнаружения ошибок предназначены для выявления искажений в сообщениях при их передаче по зашумленным каналам. Для этого передающее устройство вычисляет некоторое число, называемое контрольной суммой и являющееся функцией сообщения, и добавляет его к этому сообщению. Приемное

устройство, используя тот же самый алгоритм, рассчитывает контрольную сумму принятого сообщения и сравнивает ее с переданным значением [1].

Под контрольной суммой CRC (Cyclic Redundancy Check) понимается некоторое значение, рассчитанное по набору данных путем применения математических алгоритмов, обеспечивающих устойчивость к хэш-коллизиям

[2]. Под хэш-коллизией понимается равенство контрольных сумм для различных входных данных. Контрольные суммы широко применяются для осуществления контроля правильности хранимой и передаваемой информации.

Логической предпосылкой использования контрольной суммы этого типа явилось то, что размер контрольной суммы значительно меньше формата преобразуемых чисел/сообщений, следовательно, вероятность искажения контрольной суммы (при передаче информации по какому-либо каналу или при ее хранении на носителе) значительно ниже вероятности искажения массива информации.

Циклические избыточные коды (CRC) являются подклассом блочных кодов и применяются в протоколах HDLC, Token Ring, Token Bus, в семействах протоколов Ethernet и других протоколах канального уровня. Популярность CRC-кодов обусловлена тем, что процедуры кодирования и декодирования достаточно просты и не требуют больших вычислительных ресурсов.

Алгоритм CRC базируется на свойствах деления с остатком двоичных полиномов, таким образом, значение CRC - остаток от деления полинома, соответствующего входным данным, на некий фиксированный порождающий (генераторный) полином [1].

К важнейшим задачам построения CRC-кодов относится выбор порождающего полинома. Существует множество стандартизованных и рекомендованных разными организациями порождающих полиномов, используемых для генерации CRC. Например, порождающий полином CRC32 по стандарту IEEE 802.3 выглядит так:

32 , 26 , 23 , 22 , 16 , 12 , 11 , 10 ,

X + X + X + x +x +x +x +X +

, 8, 7, 5 . 4 . 2, ,,

+ x + x + x + x + x + x + 1 =

= 0 x04C11DB7 (в шестнадцатеричном виде), =100110000010001110110110111 (в двоичном виде).

Одним из основных условий для выбора полинома является то, что коэффициенты в

старшем и младшем битах были равны единице.

Математическая модель нахождения контрольной суммы может быть записана следующим образом:

R(x) = P(x)xNmod G(x) , (1)

где R(x) - полином, представляющий значение CRC; P(x) - полином, коэффициенты которого представляют входные данные; G(x) - порождающий полином; N - степень порождающего полинома (1 < N < 256).

Таким образом, вычисление CRC возможно реализовать на базе любого языка программирования за счет использования операций XOR (логическая операция «сложение по модулю два») и SHL (логическая операция «сдвиг влево»), поскольку они встроены практически в любой язык программирования [3, 4].

Вероятность того, что искажение передаваемого сообщения в нескольких позициях будет таковым, что итоговая контрольная сумма не изменится, определяется по формуле [5-8]

P О N •

(2)

Краткое описание алгоритмов подсчета CRC

Прямой алгоритм вычисления CRC определяет контрольную CRC побитно [9], его можно описать следующим образом в соответствии

с (1):

1) дополнить исходное сообщение нулями для выравнивания (количество нулей обусловливается степенью порождающего полинома). P(x)' = P(x)000...N;

2) выполнять операцию сдвига влево последовательности бит сообщения P(x)' до тех пор, пока бит в ячейке не станет равным единице или количество бит станет меньше, чем в делителе;

3) если старший бит станет равным единице, то производим операцию XOR между

сообщением и порождающим полиномом и повторяем шаг 2;

4) конечный остаток от последовательности P(x)' является CRC-остатком.

В приведенном описании G(x) - полином, N - степень полинома, P(x) - исходное сообщение, а P(x)' - дополненное исходное сообщение.

Необходимость выполнения множества итераций при генерации контрольной суммы CRC приводит к значительным временным затратам.

Табличный алгоритм вычисления CRC используется для ускорения расчета контрольной суммы CRC.

Ускорение осуществляется за счет замены восьми операций сдвига одной операцией поиска по таблице, которая содержит 256 значений. Поэтому при расчете контрольной суммы CRC выполняется цикл по 256 значениям.

Предпосылкой появления таблицы явилось то, что при выполнении операции XOR содержимого с постоянной величиной при различных ее сдвигах всегда будет существовать некоторое значение, которое при применении операции XOR с исходным содержимым даст тот же самый результат. Следовательно, можно составить таблицу таких величин, где индексом является исходное содержимое [1].

Алгоритм составления таблицы:

1) вычислить значение в таблице для каждого байта от 0x00 до 0xff:

а) выполнять 8 раз операцию «сдвиг вправо», причем, если младший бит равен 1, то выполняется операция XOR с полиномом G;

б) все что осталось от двух байт, становится значением в таблице.

Алгоритм вычисления контрольной суммы CRC по таблице:

1) просматривается каждый байт сообщения P(x):

а) над младшим байтом текущего значения CRC и текущим байтом сообщения проводится операция XOR - это индекс в таблице;

б) старший байт текущего значения CRC сдвигается вправо на 8 и становится младшим, затем объединяется по XOR со значе-

нием таблицы - это будет новое значение CRC;

2) в результате получено значение CRC.

Матричный алгоритм вычисления CRC используется для расчета контрольной суммы и похож на табличный, за исключением того, что вместо таблицы применяется операция умножения вектора (выдвинутый байт) на матрицу.

Основным преимуществом матричного алгоритма над табличным является размер памяти, требуемый для хранения таблицы. Так, для реализации табличного алгоритма требуется 1 Кб (256 элементов по 4 байта каждый) памяти на хранение таблицы, в то время как для матричного алгоритма - всего 32 байта (8 элементов по 4 байта каждый) [10].

Оценка временной эффективности

Чтобы сопоставить рассматриваемые способы генерации CRC по производительности в одинаковых условиях, было написано приложение на языке высокого уровня Java, позволяющее получить статистику по каждому из способов с производящим полиномом 0 xEDB88320. Статистика показывает зависимость времени их выполнения от размера исходной строки (сообщения).

Для написания приложения использованы программное обеспечение Java Development Kit версии 1.8 и среда разработки NetBeans IDE 8.2. Эксперимент проводился с помощью следующих аппаратных и программных ресурсов:

1) операционная система Windows 10 (64-разрядная);

2) двуядерный процессор Intel Core i7-7600U с тактовой частотой 2,8 Ггц;

3) 16 Гб оперативной памяти;

4) диск объемом 512 Гб.

Приложение генерирует строки (сообщения) случайным образом заданного размера на основе символов: «A»-«Z», «a»-«z», «0»-«9» и пунктуационных знаков, после чего для по-

лученной строки строится контрольная сумма по описанным ранее способам. Например, случайно сгенерированная строка, состоящая 12 символов, может выглядеть таким образом:

O h 3Tj + J71L.

Для определения времени работы алгоритмов применялся статический метод nanoTime() класса System пакета java.lang, который возвращает текущее значение времени. Таким образом, можно посчитать время работы всего приложения или отдельного его фрагмента (рис. 1). В рассматриваемом случае использовались

возможность данного метода и замер времени работы отдельного фрагмента (метода) приложения, определяемого видом алгоритма.

Анализ проводился для случайно сгенерированных строк следующих размеров (к, в Мб): 1, 2, 4, 8, 16, 32, 64 и 128.

Для вычисления среднеарифметического значения времени подсчета контрольной суммы использовалась формула

т=, (3)

р 1=1

в которой t. - время подсчета /-й контрольной суммы; Р - общее количество.

Рис. 1. Блок-схема - структура теста

Среднеквадратичное отклонение рассчитывалось следующим образом:

(4)

где t - среднеарифметическое значение.

Результаты вычислений по формулам (1)-(4) представлены в таблице.

Заключение

В статье рассмотрены прямой, табличный и матричный алгоритмы вычисления контроль-

ной суммы СЯС32. Проведено сравнение по времени работы (рис. 2).

В результате установлено, что табличный алгоритм является оптимальным по скорости вычисления контрольной суммы СЯС32. Ускорение в нем по сравнению с прямым алгоритмом было достигнуто путем замены восьми операций сдвига одной операцией поиска по таблице, которая содержит 256 значений. Стоит также отметить, что если речь идет о микроконтроллерах, то использование матричного алгоритма может быть обусловлено значительной экономией памяти по сравнению с табличным алгоритмом.

ш

0 и

1

I U

ш се

т и

го н

а. Ф

го 5

Ü 2

ф (С

О. I со

0,000

8 16 Размер строки, Мб

Рис. 2. Зависимость времени работы прямого (1), матричного (2) и табличного (3) алгоритмов

вычисления CRC от размера строки

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

Зависимость времени работы алгоритмов вычисления CRC от размера строки

h, Мб Табличный алгоритм Прямой алгоритм Матричный алгоритм

t , с о, c t , с о, с t , с о, c

1 0,0024 0,0008 0,0085 0,0019 0,0065 0,0013

2 0,0046 0,0007 0,0165 0,0021 0,0128 0,0017

4 0,0094 0,0011 0,0346 0,005 0,0268 0,0037

8 0,0193 0,0046 0,0697 0,0134 0,0534 0,0101

16 0,0361 0,0041 0,1302 0,0158 0,1005 0,0121

32 0,0716 0,0031 0,2564 0,0142 0,1993 0,01

64 0,1446 0,0056 0,5171 0,0234 0,3998 0,0164

128 0,2891 0,0187 1,0337 0,0668 0,8006 0,0385

Библиографический список

1. Ross N. W. A Painless guide to CRC error detection algorithms / N. W. Ross. - 16 Lerwick Avenue, Hazelwood Park, 5066. - Australia, 1993. - URL : http://www.ross.net/crc/download/crc_v3.txt (дата обращения : 01.04.2018).

2. Мыцко Е. А. Особенности программной реализации вычисления контрольной суммы CRC32 на примере PKZIP, WINZIP, ETHERNET / Е. А. Мыцко, А. Н. Мальчуков // Вестн. науки Сибири. - 2011. -№ 1 (1). - С. 279-282.

3. Мальчуков А. Н. Быстродействующие алгоритмы вычисления контрольной суммы на примере CRC8 / А. Н. Мальчуков, А. Н. Осокин // Молодежь и современные информационные технологии : сб. трудов VIII Всерос. науч.-практич. конференции студентов, аспирантов и молодых ученых. Томск, 3-5 марта 2010 г. - Томск : СПБ Графикс, 2010. -С.34-35.

4. Буркатовская Ю. Б. Быстродействующие алгоритмы деления полиномов в арифметике по модулю два / Ю. Б. Буркатовская, А. Н. Мальчуков, А. Н. Осокин // Изв. Томск. политехн. ун-та. - 2006. - № 1 (309). - С. 19-24.

5. Koopman P. 32-Bit cyclic redundancy codes for internet applications / P. Koopman // Intern. Conference on Dependable Systems and Networks (DSN). -Washington, DC, July, 2002. - Р. 459-468.

6. Яковлев В. В. Оценка влияния помех на производительность протоколов канального уровня / В. В. Яковлев, Ф. И. Кушназаров // Изв. Петерб. гос. ун-та путей сообщения. - СПб. : ПГУПС, 2015. -Вып. 1 (42). - С. 133-138.

7. Halsall F. Data communications, computer networks and open systems / F. Halsall. - Addison-Wesley : Pearson Education, 1996. - 907 р.

8. Олифер В. Г. Компьютерные сети. Принципы, технологии, протоколы / В. Г. Олифер, Н. А. Оли-фер. - СПб. : Питер, 2008. - 958 с.

9. Темников Ф. Е. Теоретические основы информационной техники : учеб. пособие. - 2-е изд., испр. и доп. / Ф. Е. Темников, В. А. Афонин, В. И. Дмитриев. - М. : Энергия, 1979. - 512 с.

10. Мальчуков А. Н. Быстрое вычисление контрольной суммы CRC: таблица против матрицы / А. Н. Мальчуков, А. Н. Осокин // При-

кладная информатика. - 2010. - № 2 (26). -С. 58-63.

References

1. Ross N. W. A Painless guide to CRC error detection algorithms. Australia, 1993. URL: http://www.ross. net/crc/download/crc_v3.txt (accessed: 01.04.2018).

2. Mytsko E.A. & Malchukov A. N. Osobennosti programmnoy realizatsii vychisleniya kontrolnoy summy CRC32 na primere PKZIP, WINZIP, ETHERNET [The specificities of software implementation of CRC32 checksum calculation by the example of PKZIP, WINZIP, ETHERNET]. VestniknaukiSibiri [The Siberian Science newsletter], 2011, no.1 (1), pp. 279-282. (In Russian)

3. Malchukov A. N. & Osokin A. N. Bystrodeist-vuyushchiye algoritmy vychisleniya kontrolnoy sum-my na primere CRC8 [Fast algorithms for calculating the checksum using the example CRC8]. Molodezh i sovremennyye informatsionnyye tekhnologii: Sbornik trudov VIII Vseros. nauch.-prakt. konference studen-tov, aspirantov i molodykh uchenykh [The youth and modern information technologies: Proceedings of the VIII All-Russian research and training conference of students, postgraduates and young scientists]. Tomsk, March 3-5th, 2010. Tomsk, SPB Grafiks Publ., 2010, pp. 34-35. (In Russian)

4. Burkatovskaya Yu. B., Malchukov A. N. & Oso-kin A. N. Bystrodeystvuyushchiye algoritmy deleniya polinomov v arifmetike po modulyu dva [Fast-acting algorithms for dividing polynomials in arithmetics modulo two]. Izvestiya Tomskogo Politekhnicheskogo Universiteta [Proceedings of Tomsk Polytechnic University], 2006, no. 1 (309), pp. 19-24. (In Russian)

5. Koopman P. 32-Bit Cyclic Redundancy Codes for Internet Applications. Intern. Conference on Dependable Systems and Networks (DSN) (Washington, July 2002). Washington, DC, 2002, pp. 459-468.

6. Jakovlev V. V. & Kushnazarov F. I. Otsenka vli-janija pomekh na proizvoditelnost protokolov kanal-nogo urovnya [Estimating the impact of interference on the performance of link layer protocols]. Izvestija Peterburgskogo Universitetaputej soobshchenija [Proceedings of Petersburg State Transport University]. Saint Petersburg, PGUPS Publ., 2015, issue 1 (42), pp. 133-138. (In Russian)

7. Halsall F. Data communications, computer networks and open systems. Addison-Wesley, Pearson Education Press, 1996, 907 p.

8. Olifer V. G. & Olifer N. A. Kompjuterniye sety. Printsipy, tekhnologii, protokoly [Computer networks. Principles, technologies,protocols]. Saint Petersburg, Peter Publ., 2008, 958 p. (In Russian)

9. Temnikov F. E., Afonin V.A. & Dmitriev V. I. Teo-reticheskie osnovy informatsionnoy tekhniky: ucheb-

noye posobiye [Theoretical basis of information technology: study guide]. Moscow, Energia Publ, 1979, 512 p. (In Russian)

10. Malchukov A. N. & Osokin A. N. Bystroje vy-chislenije kontrolnoy summy CRC: tablitsa pro-tiv matritsy [Fast calculation of CRC checksum: table versus matrix]. Prikladnaja informatika [Applied informatics], 2010, no. 2 (26), pp. 58-63. (In Russian)

*КЛИМЕНКО Сергей Витальевич - аспирант, s.klimenko@live.ru; ЯКОВЛЕВ Валентин Васильевич - д-р техн. наук, профессор, jakovlev@pgups.ru; БЛАГОВЕЩЕНСКАЯ Екатерина Анатольевна - д-р физ.-мат. наук, доцент, vmkaf@pgups.ru (Петербургский государственный университет путей сообщения Императора Александра I)

i Надоели баннеры? Вы всегда можете отключить рекламу.