1. Trang chủ
  2. » Thể loại khác

Thực thi nhanh thuật toán RSA

18 588 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 18
Dung lượng 127,58 KB

Nội dung

Mã hóa công khai được sử dụng để bảo vệ dữ liệu số thông qua kênh không an toàn từ nơi này đến nơi khác.. Thuật toán RSA được sử dụng rộng rãi trong các ứng dụng của cơ sở hạ tầng khóa c

Trang 1

A FAST IMPLEMENTATION OF THE RSA ALGORITHM USING THE GNU

MP LIBRARY

Rajorshi Biswas, Shibdas Bandyopadhyay, Anirban Banerjee

Indian Institute of Information Technology, Calcutta

//thực thi nhanh thuật toán RSA sử dụng thư viện GNU MP

ABSTRACT

Organizations in both public and private sectors have become increasingly

dependent on electronic data processing Protecting these important data is of utmost concern to the organizations and cryptography is one of the primary ways

to do the job Public Key Cryptography is used to protect digital data going

through an insecure channel from one place to another RSA algorithm is

extensively used in the popular implementations of Public Key Infrastructures In this paper, we have done an efficient implementation of RSA algorithm using gmp library from GNU We have also analyzed the changes in the performance of the algorithm by changing the number of characters we are encoding together (we termed this procedure as bitwise incremental RSA)

// tính trừng tượng

Các tổ chức trong các lĩnh vực công khai hay bí mật đều phụ thuộc vào quá trình

xử lý dữ liệu số Việc bảo vệ dữ liệu quan trọng là mục tiêu tối cao của các tổ chức

và mã hóa là một trong những cách làm chủ yếu cho công việc này Mã hóa công khai được sử dụng để bảo vệ dữ liệu số thông qua kênh không an toàn từ nơi này đến nơi khác Thuật toán RSA được sử dụng rộng rãi trong các ứng dụng của cơ sở

hạ tầng khóa công khai Trong tài liệu này, đã làm một ứng dụng của thuật toán RSA sử dụng thư viện GMP từ GNU Cũng đã phân tích sự thay đổi trong hiệu suất của thuật toán bằng cách chuyển đổi số của các ký tự mà ta mã hóa

KEYWORDS

Cryptography,RSA,PKI,GMP

1 INTRODUCTION

Trang 2

Data communication is an important aspect of our living So, protection of data from misuse is essential A cryptosystem defines a pair of data transformations called encryption and decryption Encryption is applied to the plain text i.e the data to be communicated to produce cipher text i.e encrypted data using

encryption key Decryption uses the decryption key to convert cipher text to plain text i.e the original data Now, if the encryption key and the decryption key is the same or one can be derived from the other then it is said to be symmetric

cryptography This type of cryptosystem can be easily broken if the key used to encrypt or decrypt can be found To improve the protection mechanism Public Key Cryptosystem was introduced in 1976 by Whitfield Diffe and Martin Hellman of Stanford University It uses a pair of related keys one for encryption and other for decryption One key, which is called the private key, is kept secret and other one known as public key is disclosed

//Giới thiệu

Trao đổi dữ liệu là một khía cạch quan trọng trong cuộc sống của chúng ta Vì vậy, bảo vệ dữ liệu khỏi những hacker là vô cùng cần thiết Hệ thống mã hóa làm hai việc biết đổi dữ liệu đó là mã hóa và giải mã Đối với mã hóa đối xứng khóa giải

và khóa mã là giống nhau Kiểu mã hóa này có thể dễ dàng bị phá vỡ nếu khóa sử dụng mã và giải được tìm ra Để nâng cao cơ chế bảo vệ, mã hóa công khai được giới thiệu năm 1976 bởi Whitfield Diffe và Martin Hellman của đại học Stanford

Nó được sử dụng với hai khóa, một để mã hóa và khóa còn lại để giải mã Một khóa gọi là khóa bí mật được giữ bí mật và một gọi là khóa công khai được công bố

The message is encrypted with public key and can only be decrypted by using the private key So, the encrypted message cannot be decrypted by anyone who knows the public key and thus secure communication is possible RSA (named after its authors - Rivest, Shamir and Adleman) is the most popular public key algorithm

// Bản tin được mã hóa với khóa công khai và chỉ có thể giải mã bằng khóa bí mật

Vì vậy bản tin mã hóa không thể giải mã bởi bất kỳ ai biết khóa công khai và thông tin được bảo vệ RSA là thuật toán khóa công khai rất phổ biến

In relies on the factorization problem of mathematics that indicates that given a very large number it is quite impossible in today's aspect to find two prime

Trang 3

numbers whose product is the given number As we increase the number the

possibility for factoring the number decreases So, we need very large numbers for

a good Public Key Cryptosystem GNU has an excellent library called GMP that can handle numbers of arbitrary precision We have used this library to implement RSA algorithm As we have shown in this paper, number of bits encrypted together using a public key has significant impact on the decryption time and the strength of the cryptosystem

Độ khó của thuật toán là vấn đề phân tích ra thừa số, chỉ ra rằng cho một số rất lớn

và không thể phân tích ra được hai số nguyên tố Ta tăng số đã cho lên để khả năng phân tích ra hai thừa số giảm đi Vì vậy, ta cần các số rất lớn cho hệ thống mã hóa công khai tốt GNU có một thư viện tuyệt vời gọi là GMP mà có thể xử lý các số chính xác tùy ý Trong tài liệu này có sử dụng thư viện GMP để thực hiện thuật toán RSA Số bít mã hóa sử dụng khóa công khai có tác động đáng kể đến thời gian mã hóa và độ mạnh của hệ thống mã hóa

2 REVIEW OF EXISTING LITERATURE

Authentication protocols and their implications are discussed in [1] Computing inverse of a shared secret modulus, which involves mathematical formulation of RSA, is discussed in [2] Application of hash function in the field of cryptography

is discussed in [3] The strength of RSA algorithm is discussed in [4] A survey of fast exponentiation method is done in [5] Cryptosystem for sensor networks is studied in [6] Security proofs for various digital signature scheme is studied in [7] Multiparty authentication services and key agreement protocols are discussed in [8] Various fast RSA implementations are described in [9] An efficient

implementation of RSA is discussed in [10] The basic RSA algorithms and other cryptography related issues are discussed in [11]

3 SCOPE OF PRESENT WORK

Our work in this paper is focused primarily on the implementation of RSA For efficient implementation we have used the GMP library, we have explored the behaviour and feasibility of the algorithm with the change of various input

Trang 4

parameters, and finally a user interface is developed to provide an application of our analysis

Phạm vi của công việc

Việc thực thi ứng dụng trong tài liệu này tập trung chủ yếu vào ứng dụng của thuật toán RSA Để ứng dụng đạt hiệu quả cao, có sử dụng thư viện GMP và đã nghiên cứu tính khả thi và các thực hiện thuật toán với sự thay đổi khác nhau của thông số đầu vào, và cuối cùng giao diện người sử dụng được phát triển để cung cấp một ứng dụng dựa vào các phân tích đưa ra

5 OUR IMPLEMENTATION OF THE RSA ALGORITHM

Chương trình ứng dụng thuật toán RSA

5.1 Introduction

We have implemented the RSA cryptosystem in two forms : a console mode

implementation, as well as a user friendly GUI implementation We focus on the console mode implementation here, and leave the GUI implementation for a later section of this report The console application uses a 1024 bit modulus RSA

implementation, which is adequate for non-critical applications By a simple

modification of the source code, higher bit-strengths may be easily achieved, albeit with a slight performance hit

Giới thiệu

Tôi đã thực hiện hệ thống mã hóa RSA ở dạng chương trình chế độ điều khiển Ứng dụng bảng điều khiển sử dụng 1024 bít Bằng cách chỉnh sửa đơn giản mã nguồn, có thể nâng cao số bít lên nhưng hiệu suất sẽ thâp đi

5.2 Handling large integers and the GMP library

Any practical implementation of the RSA cryptosystem would involve working with large integers (in our case, of 1024 bits or more in size) One way of dealing with this requirement would be to write our own library that handles all the

required functions While this would indeed make our application independent of any other third-party library, we refrained from doing so due to mainly two

considerations First, the speed of our implementation would not match the speed

Trang 5

of the libraries available for such purposes Second, it would probably be not as secure as some available open-source libraries are

Xử lý các số nguyên lớn và thư viện GMP

Chương trình ứng dụng hệ thống mã hóa RSA sẽ làm việc với số nguyên lớn(1024 bít hoặc lớn hơn) Một cách cách là tự viết một thư viện xử lý được tất cả các chức năng được yêu cầu Trong khi thực sự là chương trình ứng dụng này độc lập với thư viện bên thứ ba khác, tốc độ của chương trình sẽ không bằng tốc độ của thư viện, tiếp nữa là không bảo mật như các thư viện mã nguồn mở

There were several libraries to consider for our application We narrowed the choice to three libraries: the BigInteger library (Java), the GNU MP Arbitrary Precision library (C/C++), and the OpenSSL crypto library (C/C++) Of these, the GMP library (i.e the GNU MP library) seemed to suit our needs the most

Hiện tại có vài thư viện được xem xét sử dụng Có ba thư viện được chọn: thư viện BigInteger(Java), thư viện GNU MP(C/C++), và thư viện Open SSL cryto (C/C+ +) Trong số đó, thư viện GMP dường như thích hợp cho việc thực hiện ứng dụng này nhất

The GMP library aims to provide the fastest possible arithmetic for applications that need a higher precision than the ones directly supported under C/C++ by using highly optimized assembly code Further the GMP library is a cross-platform library, implying that our application should work across platforms with minimal modifications, provided it is linked with the GMP library for the appropriate

platform We have used the facilities offered by the GMP library heavily

throughout our application The key generation, encryption and decryption routines all use the integer handling functions offered by this library

Thư viện GMP có mục đích cung cấp thuật toán nhanh nhất cho các ứng dụng cần

sự chính xác cao hơn các thư viện cùng hỗ trợ C/C++ bằng cách sử dụng mã hợp ngữ được tối ưu hóa cao Hơn thế nữa, thư viện GMP là thư viện đa nền tảng, ứng dụng được viết này sẽ làm việc ở nhiều nền với các sự điều chỉnh ít nhất, nó được liên kết với thư viện GMP với nền tảng thích hợp tôi đã sử dụng những điều kiện

dễ dàng mà thư viện GMP cung cấp để tích hợp vào ứng dụng Việc tạo khóa, mã hoa, giải mã đều được xử lý bởi các hàm được cung cấp bởi thư viện GMP

Trang 6

5.3 Application Overview

In this subsection, we present the basic structure of the console mode RSA

implementation The program is meant for use on a per user basis where each user's home directory stores files containing the private and public keys for the particular user The application stores the private and public keys for a user in the files $HOME/.rsaprivate and $HOME/.rsapublic respectively

Tổng quan ứng dụng

Trong tiểu đề này, tôi sẽ trình bày cấu trúc đơn giản của chương trình RSA chế độ dòng lệnh Mỗi người dùng sẽ có một tập tin lưu trữ khóa công khai và khóa bị mật cho từng người dùng đó Ứng dụng lưu trữ khóa công khai và khóa bí mật cho một người dùng ở trong trập tin $HOME/.rsa cho khóa bí mật và $HOME/.rsa cho khóa công khai

At the very beginning the program searches for the existence of the

aforementioned files and reads in the values of the private and public keys If they are not present (as when the application is run for the first time), the program proceeds to generate the keys and writes them to the files

Mỗi khi chướng trình bắt đầu nó sẽ tìm các tập tin đã nêu trên xem có tồn tại không

và đọc các giá trị khóa bí mật và khóa công khai Nếu chúng không có nội dung (khi ứng dụng chạy lần đầu), chương trình sẽ tạo các khóa và viết chúng vào các tập tin

Following this, the user is presented with a menu, asking him whether he would like to encrypt a file, decrypt an encrypted file, or quit the application If the user chooses to encrypt a file, he is asked to enter the path to the file containing the recipient's public keys as well as the number of characters to encrypt at a time (this

is justified later) If decryption is chosen, the path to the encrypted file is requested and the program subsequently decrypts the file to the standard output

Chương trình sẽ hỏi người sử dụng liệu có muốn mã hóa file hay giải mã một file

đã mã hóa hoặc là thoát khỏi chương trình Nếu người sử dụng chọn mã hóa file, thì người dùng sẽ được hỏi đưa đường dẫn đến file có chưa khóa công khai của người nhận Nếu giải mã được chọn, cái thành phần đường dẫn để mã hóa file được yêu cầu và chương trình giải mã file đó đến một đầu ra chuẩn

Trang 7

5.4 RSA key generation

The generation of the RSA keys is of paramount importance to the whole

application The application maintains a constant named 'BITSTRENGTH' which

is the size of the RSA modulus (n) in bits According to this setting, two character arrays to contain the digits of the primes p and q are declared A simple loop

through all the digits of this array initializes the array with a random string of bits

We have used C's inbuilt random number generation routines to generate the bits of the string The random generator is seeded using the srand() routine by the return value of the function time(), which returns the time since the epoch (00:00:00 UTC, January 1, 1970), measured in seconds Key generation at the same return value of time() is avoided by sleep(), which delays the execution by one second, thus ensuring that the random numbers are never repeated

srand giống như rand là hàm dùng để tạo số ngẫu nhiên nhưng srand sau mỗi lần khởi động cho các kết quả không trùng nhau.

srand là hàm thiết lập 1 hạt seed -"start point" nghĩa là lấy seed làm cơ sở để random number.Nếu cùng seed thì sẽ random giống nhau.

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

void main ()

{

int a , ;

srand ( ); //dat seed cho a;

a rand ()% 5

printf ("%d\nPress to continue\n", );

getch ();

srand ( ); //dat lai seed cho b;

b rand ()% 5

printf ("%d:%d\n", , ); //ket qua giong nhau

}

Tạo khóa RSA

Việc tạo các khóa RSA là tối quan trọng trong ứng dụng này Ứng dụng này duy trì một hằng số tên là ‘BITSTRENGTH’ Theo như cài đặt, hai mảng ký tự chứa các con số của số nguyên tố p và q đã được tìm ra Một vòng lặp xuyên suốt các chữ số của mảng này khởi tạo mảng với một chuỗi bit ngẫu nhiên Tôi có sử dụng hàm tạo

số ngẫu nhiên để tạo các bít của chuỗi này Máy tạo số ngẫu nhiên được sử dụng hàm srand() bằng cách nhận giá tri hàm time(), hàm này trả lại thời gian kể từ khi bắt đầu và được đo bằng giây Việc tạo khóa trả lại giá trị của time() được tránh

Trang 8

bởi hàm sleep(), đây là độ trễ thực hiện được tính bằng giây, do đó để đảm bảo rằng các số ngẫu nhiên không bao giờ lặp lại

At the end of this process, we have strings containing binary representations of the numbers p and q, but they are not prime yet To achieve that, two gmp integers are first initialized with the contents of these strings Then, the function

mpz_nextprime() is called, which changes p and q to the next possible primes This function uses a probabilistic algorithm to identify primes According to the gmp manual, it is adequate for practical purposes and the chance of a composite passing

is extremely small

Ở cuối quá trình xử lý này, tôi có các chuỗi bao gồm các số nhị phân của các số p

và q, nhưng chúng không phải là số nguyên tố Để đạt được điều này, hai số

nguyên gmp được tạo với nội dung của các chuỗi này Sau đó, hàm

mpz_nextprime() được gọi, nó thay đổi p và q thành các số nguyên tố tiếp theo Hàm này sử dụng thuật toán xác suất để xác định các số nguyên tố

Now that we have the two 512-bit primes p and q, calculating the values of n (=pq) and x (=(p- 1)*(q-1)) is a simple matter of invoking mpz_mul() with the proper arguments Next, to determine the value of 'e', we started with a value of 65537, and incremented it by two each time until the condition gcd(e,x) = 1 is satisfied (which, incidentally, is almost always satisfied by the number 65537 itself)

Bây giờ chúng ta đã có hai số p và q là số nguyên tố kích cỡ khoảng 512 bit, tính giá trị của n (=pq) và x (=(p-1)*(q-1)) là các thông số của hàm mpz_mul() Tiếp theo, để xác định giá trị của e, ta bắt đầu với giá trị 65537, và tăng nó lên cho đên khí gcd(e,x)=1 được thỏa mãn

Now there exists a procedure in the gmp library with the prototype int

mpz_invert(mpz_t ROP, mpz_t OP1, mpz_t OP2) which computes the

multiplicative inverse of OP1 modulo OP2 and puts the result in ROP Using this function helps us avoid writing our own routine based on the Extended Euclidean Algorithm (as this function executes extremely fast) In this way, we obtain the value of d, which completes our quest for the RSA keys Finally the keys (d,e,n) are stored in two files rsapublic and rsaprivate, both in the user's home directory

Trang 9

Giờ đã có sự tồn tại của thủ tục trong thư viện gmp với hàm “int mpz_invert(mpz_t ROP, mpz_t OP1, mpz_t OP2)”, hàm này tích nhân nghịch đảo của OP1 mô đun OP2 và đưa kết quả vào ROP Sử dụng hàm này giúp chúng ta tránh được việc viết các hàm dựa trên thuật toán Euclidean mở rộng (giống như hàm thực hiện cực nhanh) Theo cách này, chúng ta thu được giá trị của d, vậy là đã hoàn thành yêu cầu cho các khóa RSA Cuối cùng khóa (d,e,n) được lưu trữ vào hai tập tin

.rsapublic và rsapricate, cả hai đều có đường dẫn đến nơi lưu trữ cho người dùng

It is to be noted that the entire application can use a higher (or lower) bitstrength of the RSA modulus n by simply changing the constant BITSTRENGTH at the very beginning of the source-code

Chú ý rằng toàn bộ ứng dụng có thể sử dụng độ mạnh cao hơn của mô đun n RSA bằng cách thay đổi hằng số BITSTRENGTH ở đoạn đầu mã nguồn

5.5 RSA encryption

As the application is executed, the existence of the key files are checked and if they do not exist, the RSA keys are generated Following this, the user is presented with a menu, which enables him to choose to encrypt, decrypt or quit

Khi chương trình ứng dụng thực thi, nó sẽ kiểm tra các tệp tin khóa có tồn tại không nếu không, các khóa RSA sẽ được tạo Người dùng sẽ được được phép chọn

mã hóa, giải mã hoặc thoát

First, the path to the file containing the public key of the recipient is requested from the user However the user is also given the option of using his own public keys (in which case, only he can decrypt the message) Using the values of e and n read from the relevant file containing the public keys, the message is encrypted

Đầu tiên, đường dẫn đến tập tin chưa khóa công khai của người nhận được yêu cầu

từ người sử dụng Tuy nhiên người sử dụng cũng được tùy chọn sử dụng các khóa công khai của mình(chỉ người đó mới có thể giải mã được bản tin Sử dụng các giá trị của e và n đọc từ tệp tin có khóa công khai, bản tin được giải mã

A critical requirement for the proper functioning of the RSA algorithm is that the message m must be represented as an integer in the range [0,n-1] (where n is, as usual, the RSA modulus) Our application converts text messages to integers by

Trang 10

using a simple mapping of every character to its ASCII code But encrypting only one character at a time is not only expensive in terms of the time required to

encrypt and decrypt, but also in terms of security

Yêu cầu cuối cùng trong thuật toán RSA là bản tin m phải được biểu diễn bởi một

số nguyên trong giải [0, n-1] Ứng dụng chuyển bản tin rõ thành các số nguyên bằng cách so sánh trong bản mã ASCII Nhưng mã hóa chỉ một ký tự một thời điểm không giảm về thời gian mã hóa và giải mã mà còn về sự bảo mật

This is because the encrypted integers would then only be from a small finite set (containing a maximum of as many integers as the number of ASCII characters) Hence, we ask the user the number of characters to encrypt at a time For an RSA encryption scheme with the modulus size of 1024 bits, we have seen that about 100 characters can be encrypted at once Lesser number of characters cause encryption and (especially) decryption to take significantly longer, whereas higher number of characters often violate the condition that the message m must lie in the interval [0,n-1]

Có điều này bởi vì các số nguyên được mã hóa sẽ chỉ là từ một tập hợp hữu hạn nhỏ(có chứa tối đa số lượng số nguyên bằng bới số lượng trong bảng mã ASCII) Người dùng sẽ được hỏi số lượng các ký tự mã hóa cùng một lúc Lược đồ mã hóa RSA với mô đun lô cỡ 1024, có nghĩa là khoảng 100 ký tự có thể được mã hóa cùng một lúc

The entire file to encrypt is processed as a group of strings each containing the specified number of characters (except possibly the last such string) Each

character in such a string is converted to its 3- character wide ASCII code, and the entire resulting numeric string is our message m Encrypting it is achieved by computing m ^ e mod n There is a gmp routine specifically for such a computation having the prototype void mpz_powm (mpz_t ROP, mpz_t BASE, mpz_t EXP, mpz_t MOD) which sets ROP to (BASE raised to EXP) modulo MOD Thus invoking moz_powm(c,m,e,n) stores the encrypted partial message in the integer c This is written each time to the file to encrypt to until the whole message has been processed This completes the encryption process

Toàn bộ tệp tin để mã hóa được xử lý như một nhóm các cuỗi mà mỗi nhóm bao gồm số lượng cụ thể các ký tự Mỗi ký tự trong chuỗi được chuyển thành 3 ký tự

Ngày đăng: 04/05/2014, 10:40

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w