Mã hoá khoá phi đối xứng antisymetric encryption mã hoá khoá công khai Khi quá trình tin học hóa xã hội đang diễn ra nhanh chóng như hiện nay thì vấn đề đảm bảo an toàn thông tin trở nên quan trọng hơn bao giờ hết. Việc đảm bảo an toàn thông tin đòi hỏi phải kết hợp nhiều biện pháp, công cụ, trong đó mật mã đóng vai trò hết sức quan trọng.
Trang 1MỤC LỤC
MỤC LỤC 1
DANH MỤC CÁC TỪ VIẾT TẮT 2
DANH MỤC BẢNG BIỂU 3
DANH MỤC HÌNH VẼ 4
LỜI NÓI ĐẦU 5
Chương 1 MẬT MÃ KHÓA CÔNG KHAI 6
1.1 Mật mã khóa công khai 6
1.1.1 Giới thiệu chung về mật mã khóa công khai 6
1.1.2 Nguyên tắc cấu tạo của mã khóa công khai 7
1.1.3 Phân loại các hệ mật khóa công khai 8
1.2 Các hệ mật mã khóa công khai 9
1.2.1 Hệ mật RSA 10
1.2.2 Hệ mật ElGamal 12
1.2.3 Hệ mật trên các đường cong Elliptic 13
1.2.4 Giải pháp về vấn đề an toàn 14
Chương 2 THƯ VIỆN GMP HỖ TRỢ TÍNH TOÁN VỚI SỐ LỚN 15
2.1 Giới thiệu 15
2.2 Các phép toán trên số nguyên 16
2.3 Hiệu suất 19
2.4 Cài đặt 20
Chương 3 CÀI ĐẶT THUẬT TOÁN RSA SỬ DỤNG THƯ VIỆN GMP 22
3.1 Tạo khóa RSA 22
3.2 Mã hóa bằng RSA 26
3.3 Giải mã bằng RSA 28
3.4 Cài đặt, biên dịch và thực thi 29
3.5 Phân tích thời gian thực hiện 30
3.5.1 RSA 1024 bít 30
3.5.2 RSA với kích cỡ khóa khác nhau 30
KẾT LUẬN 32
TÀI LIỆU THAM KHẢO 33
PHỤ LỤC Error! Bookmark not defined.
Trang 2DANH MỤC CÁC TỪ VIẾT TẮT
ANSI American National Standards Institute -Viện tiêu chuẩn quốc gia
của Mỹ
ASCII American Standard Code for Infornation Interchange
CBC Cipher Block Chaining
DES Data encryption Standard
IDEA International Data Encryption Algorithm
IEEE Institute of Electrical and Electronic Engineers - Viện kỹ thuật của
kỹ sư điện và điện tử
IETF Internet Engineering Task Force
IMAP Internet Message Access protocol
MIME Multipurpose Internet Mail Extensions
PCBC Propagating cipher block chaining
PGP Pretty Good Privacy
PKCS Public Key Cryptography Standard
S/ MIME Secure-MIME
TLS Transport Layer Security
MIT Học viện Công nghệ Massachusetts
GCHQ Cơ quan Thông tin chính phủ
RSA Rivest Shamir Adleman
GCD Great Comon Divisor
Trang 3DANH MỤC BẢNG BIỂU
Bảng 1.1: Các bài toán để so sánh 8Bảng 3.1: Thời gian mã hóa và giải mã RSA (10.000 ký tự) 30Bảng 3.2: Thời gian cho các độ dài khóa khác nhau (10.000 ký tự) 30
Trang 4DANH MỤC HÌNH VẼ
Hình 1.1: Mô hình mã hóa và giải mã trong mật mã khóa công khai 7Hình 1.2: Mô hình ký và kiểm tra chữ ký trong mật mã khóa công khai 7Hình 1.3: Sơ đồ mã hóa và giải mã thông tin dựa trên thuật thoát RSA 11
Trang 5LỜI NÓI ĐẦU
Khi quá trình tin học hóa xã hội đang diễn ra nhanh chóng như hiện nay thì vấn đề đảm bảo an toàn thông tin trở nên quan trọng hơn bao giờ hết Việc đảm bảo an toàn thông tin đòi hỏi phải kết hợp nhiều biện pháp, công
cụ, trong đó mật mã đóng vai trò hết sức quan trọng Thông thường, người ta sử dụng mật mã đối xứng để mã hóa dữ liệu, còn khóa để thực hiện việc mã hóa đó lại được trao đổi nhờ mật mã khóa công khai Vai trò của mật mã khóa công khai không chỉ dừng lại ở việc trao đổi khóa Một chức năng rất quan trọng của mật mã khóa công khai là tạo và kiểm tra chữ ký số
Dù là mật mã đối xứng hay mật mã khóa công khai, độ an toàn là vấn
đề đầu tiên cần xem xét khi quyết định sử dụng một hệ mật nào đó Độ an toàn phải được đánh giá căn cứ vào trình độ phát triển của kỹ thuật thám mã (bao gồm thuật toán thám mã và sức mạnh tính toán của các thiết bị hỗ trợ) không chỉ ở thời điểm hiện tại mà cả trong tương lai Theo như bài báo
“Factorization of a 768-bit RSA modulus” ngày 18/02/2010 RSA 768 bit đã
bị thám thành công hiện trên 80 vi xử lí Opteron Theo bài báo này, RSA 768 bit khó hơn 1000 lần so với RSA 512 bit (bị phá vỡ cách đây một thập kỉ), và RSA 1024 bit khó hơn 1000 lần so với RSA 768 bit Theo công bố của bài báo trên (tháng 2/2010), RSA 1024 bit có thể bị phá vỡ bằng sức tính toán tương đương với 1500 năm, dùng một vi xử lý Opteron 2,2 GHz Và cho đến bây giờ theo cách tấn công mới, RSA 1024 bit đã bị bẻ gãy trong 100 giờ [8] Như thế, muốn tăng độ an toàn thì cần tăng kích thước của khóa
Qua việc tìm hiểu một số hệ mật khóa công khai, có thể thấy rằng, để cài đặt chúng bằng chương trình, ta cần thực hiện các phép nhân (lũy thừa) modulo với các số hàng trăm, hàng nghìn bít (số lớn) Một vấn đề thực sự khó giải quyết đối với mật mã khóa công khai Chính vì vậy em đã chọn đề
tài bài tập lớn “Mã hoá khoá Phi đối xứng (AntiSymetric Encryption) Mã
hoá khoá Công khai”
Nội dung bao gồm:
1 Mật mã khóa công khai
2 Thư viện gmp hỗ trợ tính toán với số lớn
3 Cài đặt thuật toán rsa sử dụng thư viện gmp
Trang 6Chương 1 MẬT MÃ KHÓA CÔNG KHAI 1.1 Mật mã khóa công khai
1.1.1 Giới thiệu chung về mật mã khóa công khai
Vào năm 1976 Diffie và Hellman đã đề xuất ra các ý tưởng cho phép xây dựng các hệ mã hoạt động theo nguyên tắc mới, gắn liền với các bên truyền tin chứ không gắn với các cặp truyền tin Nguyên tắc hoạt động của các hệ mã đó là mỗi bên tham gia truyền tin sẽ có hai khóa, một khóa gọi là khóa bí mật (Ks) và một khóa gọi là khóa công khai (Kp) Khóa bí mật là khóa dùng để giải mã và được giữ bí mật, khóa công khai là khóa dùng để sinh mã được công khai hóa để bất cứ ai cũng có thể sử dụng khóa này gửi tin cho người chủ của hệ mã Nhờ mật mã khóa công khai ta có thể mã hóa một bức thư hay một tin nhắn thông qua mạng Internet mà không bị lộ thông tin bằng cách mã hóa nó bằng khóa công khai người gửi và chỉ người nhận mới có thể biết được thông tin sau khi giải mã bức thư hay tin nhắn đó bằng chính khóa bí mật của mình Trong mật mã khóa công khai, việc phân phối khóa trở nên dễ dàng hơn qua các kênh cung cấp khóa công cộng, số lượng khóa hệ thống quản lý cũng sẽ ít hơn Trong các mạng kết nối với quy mô lớn, mật mã khóa công khai đỏi hỏi ít tham số hơn, do đó ít dữ liệu về khoá hơn, nhờ đó làm tăng tính bảo mật trong mạng Các dịch vụ mới như chữ ký điện tử, thỏa thuận khóa cũng được xây dựng dựa trên mật mã khóa công khai
Các yêu cầu đối với một hệ mật mã khóa công khai bao gồm:
‒ Việc sinh Kp, Ks phải dễ dàng;
‒ Việc tính E(Kp, M) là dễ dàng;
‒ Nếu có C = E(Kp, M) và Ks thì việc tìm bản rõ cũng là dễ;
‒ Nếu biết Kp thì việc dò tìm Ks là khó;
‒ Việc khôi phục bản rõ từ bản mã là khó
Trang 7Trong mật mã khóa công khai, khi A muốn truyền tin cho B, A sẽ sử dụng khóa Kp của B để mã hóa tin tức và truyền bản mã tới cho B, B sẽ sử dụng khóa bí mật của mình để giải mã và đọc tin (Hình 1.1):
Hình 1.1: Mô hình mã hóa và giải mã trong mật mã khóa công khai
Khi A muốn ký một văn bản thì A sẽ dùng khóa bí mật Ks của mình để
ký, A gửi văn bản cho B và B sẽ sử dụng khóa công khai của A để giải mã Nếu giải mã được thì đó đúng là văn bản đã được A ký Vì chỉ có A mới có khóa bí mật để mã hóa văn bản này (Hình 1.2):
Hình 1.2: Mô hình ký và kiểm tra chữ ký trong mật mã khóa công khai
Mật mã công khai thường được sử dụng để phân phối khoá bí mật hơn
là để mã hoá bản tin Lý do là mật mã khóa công khai đòi hỏi nhiều tài nguyên tính toán hơn (và do đó chậm hơn) so với mật mã đối xứng Hệ thống lai ghép sử dụng mật mã đối xứng để mã hóa dữ liệu cho phiên truyền thông,
và sử dụng mật mã khóa công khai để bảo vệ bí mật cho khóa được sử dụng trong phiên đó
1.1.2 Nguyên tắc cấu tạo của mã khóa công khai
Các hệ mã khóa công khai được xây đựng dựa trên các hàm một chiều (one-way functions) Hàm một chiều f: X Y làm một hàm mà nếu biết x
X, ta có thể dễ dàng tính được y = f(x) Nhưng với y bất kỳ Y việc tìm x
X sao cho y = f(x) là khó Có nghĩa là việc hàm ngược f-1 là khó Ví dụ, nếu
Khóa bí mật (Ks)
Khóa công khai (Kp)
Plaintext Plaintext
B
Signed message
Khóa công khai (Kp)
Khóa bí mật (Ks)
Ciphertext
Plaintext Plaintext
B
A
Trang 8có các số nguyên tố P1,P2,…,Pn thì việc tính N = P1∙P2∙…∙Pn là dễ, nhưng nếu
có N thì việc phân tích ngược lại là một bài toàn khó
Để thuận tiện các hàm một phía được sử dụng trong các hệ mã khóa công khai thường được trang bị các cửa bẫy (trapdoor) giúp cho việc tìm x thỏa mã y = f(x) là dễ dàng nếu biết được cửa bẫy này
Hàm cửa bẫy (trapdoor function): là hàm một chiều trong đó việc tính
f-1 là rất nhanh khi chúng ta biết được cửa bẫy của hàm Ví dụ việc tìm nghiệm của bài toán xếp ba lô 0/1 trong hệ mã xếp ba lô là một hàm một phía (việc mã hóa rất nhanh và dễ dàng nhưng tìm vectơ nghiệm tương ứng là khó) nhưng nếu ta biết cửa bẫy (vectơ xếp balô siêu tăng A’) thì bài toán tính
f-1 lại rất dễ dàng
Độ an toàn của các hệ mật khóa công khai được đảm bảo bới các bài toán khó giải Hiện nay, các bài toán đó là:
‒ Bài toán phân tích thừa số nguyên tố (IFP)
‒ Bài toán tính lôgarít rời rạc (DLP)
‒ Bài toán tính lôgarít rời rạc trên đường cong Elliptic (ECDLP) Nội dung cụ thể của các bài toán này được trình bày trong Bảng 1.1
Khóa công khai
dựa trên vấn đề đã
cho
1.1.3 Phân loại các hệ mật khóa công khai
Ý tưởng về mật mã khóa công khai được Diffie và Heliman đưa ra vào năm 1975 Nhưng việc hiện thực hóa nó thì lại được Rivest, Shamin và Adieman thực hiện đầu năm 1977, khi xây dựng nên hệ mật RSA nổi tiếng
Trang 9Đến nay đã có nhiều hệ mật khóa công khai được công bố, trong đó quan trọng nhất là:
‒ Hệ mật RSA Độ bảo mật của hệ RSA dựa trên độ khó của việc phân
tích ra thừa số nguyên tố các số nguyên lớn
‒ Hệ mật McEliece Hệ mật này dựa trên lý thuyết mã đại số và vẫn
được coi là an toàn Hệ mật McEliece dựa trên bài toán giải mã cho các mã tuyến tính
‒ Hệ mật ElGamal Hệ ElGamal dựa trên tính khó giải của bài toán
Logarit rời rạc trên các trường hữu hạn
‒ Hệ mật Chor-Rivest Hệ mật Chor-Rivest cũng được xem như một
loại hệ mật xếp ba lô Tuy nhiên hệ mật này vẫn còn được coi là hệ mật an toàn
‒ Hệ mật trên các đường cong Elliptic Các hệ này là biến tướng của
hệ mật khác, chúng làm việc trên các đường cong Elliptic chứ không phải trên các trường hữu hạn Hệ mật này đảm bảo độ mật với khoá số nhỏ hơn các hệ mật khoá công khai khác
Độ an toàn của từng hệ mật dựa trên các bài toán khác nhau, nhưng tất
cả chúng có một điểm chung, đó là để đảm bảo an toàn thì chúng phải sử dụng các số lớn Đó là những số nguyên có kích thước từ hàng trăm đến hàng nghìn bít trong biểu diễn nhị phân
1.2 Các hệ mật mã khóa công khai
Từ khi ra đời vào những năm 50 của thế kỷ trước, tốc độ bộ vi xử lý của máy tính đã tăng nhanh chóng: từ hàng trăm KHz ban đầu đến hơn 3 GHz ngày nay Bên cạnh đó, hiệu năng tính toán bộ của vi xử lý còn được tăng cường bằng các thay đổi trong kiến trúc của nó, bao gồm việc thiết kế nhiều nhân trong một vi xử lý Có một đặc tính của bộ vi xử lý rất ít thay đổi – đó là độ dài thanh ghi Những bộ vi xử lý thời kỳ đầu có thanh ghi 8 bít thì ngày nay, độ dài thanh ghi trong các vi xử lý hiện đại mới là 64 bít (một số vi xử lý chuyên dụng có độ dài thanh ghi lớn hơn) Tương ứng với độ dài thanh ghi của bộ vi xử lý, các ngôn ngữ lập trình như C, C++,… cung cấp các kiểu
dữ liệu số có độ dài tối đa là 64 bít, tức là ít hơn nhiều so với nhu cầu sử dụng trong các hệ mật khóa công khai Do vậy, các số có độ dài quá 64 bít
Trang 10trong biểu diễn nhị phân, tức vượt quá khả năng lưu trữ của kiểu dữ liệu số nguyên chuẩn, được coi là các số lớn
1.2.1 Hệ mật RSA
RSA được Rivest, Shamir và Adleman phát triển, là một thuận toán mật mã hóa khóa công khai Nó đánh dấu một sự tiến hóa vượt bậc của lĩnh vực mật mã học trong việc sử dụng khóa công khai RSA đang được sử dụng phổ biến trong thương mại điện tử và được cho là đảm bảo an toàn với điều kiện độ dài khóa đủ lớn Thuật toán được công bố vào năm 1977 tại Học viện Công nghệ Massachusetts (MIT) Tên của thuật toán lấy từ ba chữ cái đầu của tên ba tác giả Trước đó, vào năm 1973, Clifford Cocks, một nhà toán học người Anh làm việc tại Trung tâm thông tin chính phủ (GCHQ: Government Communications Headquarters) thuộc Cục Trinh sát radio hoàng gia (SIGINT: Her Majesty's Government's Signal Intelligence) Anh quốc, đã
mô tả một thuật toán tương tự Với khả năng tính toán tại thời điểm đó thì thuật toán này không khả thi và chưa bao giờ được thực nghiệm Tuy nhiên, phát minh này chỉ được công bố vào năm 1997 vì được xếp vào loại tuyệt mật
Sơ đồ của quá trình mã hóa và giải mã thông tin dựa trên thuật thoát RSA được thể hiện trên Hình 1.3
Trang 11Hình 1.3: Sơ đồ mã hóa và giải mã thông tin
dựa trên thuật thoát RSA
RSA là một thí dụ điển hình về một đề tài toán học trừu tượng lại có thể áp dụng thực tiễn vào đời sống thường nhật Khi nghiên cứu về các số nguyên tố, ít có ai nghĩ rằng khái niệm số nguyên tố lại có thể hữu dụng vào lãnh vực truyền thông Hệ mật RSA hoạt động như sau:
Trang 12Bước 4: B tính d = e–1 (mod m) hay e*d = 1 (mod m) bằng cách dùng thuật toán Euclide
Bước 5: B công bố n và e trong danh bạ làm khoá công khai (public key), còn d làm khoá bí mật (private key)
b) Mã hoá
Bước 1: A (người gửi tin) nhận khoá công khai của B
Bước 2: A biểu diễn thông tin cần gửi thành số m (0 ≤ m ≤ n – 1)
n, m, e, d đều là các số lớn Như vậy, tất cả các pha (tạo khóa, mã hóa, giải mã) của hệ mật RSA đều đòi hỏi thực hiện các phép toán trên số lớn
1.2.2 Hệ mật ElGamal
Hệ mã Elgamal là một biến thể của sơ đồ phân phối khóa Hellman Hệ mã này được ElGamal đưa ra vào năm 1985 Giống như sơ đồ phân phối khóa Diffie-Hellman tính an toàn của nó dựa trên tính khó giải của bài toán logarit rời rạc
Diffie-Ban đầu người ta chọn một số nguyên tố lớn p và hai số nguyên tùy ý nhở hơn p là a (a là một phần tử nguyên thủy của Z* ) và x (x là của người nhận, bí mật) sau đó tính:
x
mod
Để mã hóa một thông điệp M (là một số nguyên trên Zp) thành bản mã
C người gửi chọn một số ngẫu nhiên k nhỏ hơn p và tính khóa mã hóa K:
mod
k
Sau đó tính cặp bản mã:
Trang 13Để giải mã thông điệp đầu tiên ta cần tính lại khóa mã hóa thông điệp K:
x
a p y Đến nay, vẫn chưa có thuật toán để giải bài toán lôgarit rời rạc với độ phức tạp tính toán hàm đa thức Tức là bài toán tìm lôgarit rời rạc là bài toán khó khi p lớn Do đó, để đảm bảo độ an toàn của hệ mật ElGamal thì cần chọn p lớn, từ đó kéo theo a, x, y, k, K, M, C1, C2 cũng là các số lớn Như vậy, hệ mật ElGamal đòi hỏi thực hiện các phép toán với số lớn
1.2.3 Hệ mật trên các đường cong Elliptic
Phép toán cộng trên đường cong elliptic tương ứng với phép nhân theo modulo trong hệ mã RSA, còn phép toán nhân (cộng nhiều lần) trên đường cong Elliptic tương ứng với phép lũy thừa theo modulo trong hệ mã RSA Tương tự như bài toán cơ sở của hệ mã RSA là bài toán phân tích ra dạng thừa số nguyên tố của một số nguyên lớn, các hệ mã dựa trên các đường con elliptic cũng có các bài toán cơ sở là một bài toán khó giải, gọi là bài toán lôgarit trên đường cong Elliptic
Xét phương trình Q = kP trong đó P, Q Ep(a, b) và k < p Việc tính Q nếu biết P và k là một bài toán dễ (thực hiện theo các công thức) Nhưng việc xác định k với giá trị P, Q cho trước lại là bài toán khó
Ví dụ: E23(9, 17) được xác định bởi phương trình
Trang 14y2 mod 23 = (x3+ 9x+ 17) mod 23
Với Q = (4, 5) và P = (16, 5) thì k thỏa mãn Q = kP sẽ bằng bao nhiêu
? Phương pháp đơn giản nhất là nhân P lên nhiều lần cho tới khi bằng Q:
P = (16, 5), 2P = (20, 20), 3P = P = (16, 5); 2P = (20, 20); 3P = (14, 14); 4P = (19, 20); 5P = (13, 10); 6P = (7, 3); 7P = (8, 7); 8P (12, 17); 9P = (4, 5)
Như vậy k = 9 Trên thực tế các hệ mã sẽ đảm bảo giá trị k là đủ lớn để phương pháp vét cạn như trên là không thể thực hiện được Và như thế, để đảm bảo độ an toàn thì hệ mật khóa công khai trên đường cong Elliptic cũng đòi hỏi thực hiện các phép tính trên tập các số lớn
1.2.4 Giải pháp về vấn đề an toàn
Qua việc tìm hiểu một số hệ mật khóa công khai, có thể thấy rằng, để cài đặt chúng bằng chương trình, ta cần thực hiện các phép nhân (lũy thừa) modulo với các số hàng trăm, hàng nghìn bít (số lớn) Trong khi đó, các máy tính hiện đại chỉ hỗ trợ thực hiện các phép toán với các số có kích thước không quá 64 bít Do vậy, để có thể triển khai bằng chương trình các thuật toán mật mã khóa công khai, cần phải có giải pháp đặc biệt để thực hiện phép tính với các số lớn Về mặt ý tưởng, có thể dùng mảng để lưu trữ các số lớn, và các phép tính với số lớn có thể được xác định thông qua việc định nghĩa các phép tính trên mảng Tuy nhiên, đây là công việc phức tạp, nhất là trong vấn đề tối ưu hóa thuật toán để đạt được tốc độ tính toán cao nhất có thể Vì lý do đó, khi cần cài đặt bằng chương trình một thuật toán mật mã khóa công khai, nếu không có đủ kiến thức uyên thâm trong kỹ thuật lập trình thì ta nên sử dụng các thư viện có hỗ trợ thực hiện các phép tính với các
số lớn
Trang 15Chương 2 THƯ VIỆN GMP HỖ TRỢ TÍNH TOÁN VỚI SỐ LỚN
2.1 Giới thiệu
GMP là thư viện do Torbjorn Granlund viết và đến bây giờ vẫn là người phát triển chính Rất nhiều cá nhân và tổ chức đã đóng góp xây dựng vào thư viện GMP Hiện giờ thư viện GMP vẫn đang được phát triển và phiên bản hiện tại là GMP 5.0.5
GMP là một thư viện cung cấp các hàm số học ở mức độ thấp nói chung, không phải được thiết kế đặc biệt cho các ứng dụng mật mã Tuy nhiên, nó thực hiện hiệu quả hơn các phép tính so với các thư viện chuyên về mật mã GMP là thư viện miễn phí được viết bằng ngôn ngữ C nhằm mục đích cung cấp thuật toán nhanh nhất có thể cho tất cả các ứng dụng cần thực hiện các phép toán số học với độ chính xác cao hơn so với khả năng mà các kiểu dữ liệu số trong ngôn ngữ C cơ bản cung cấp
GMP có đặc điểm là cực nhanh, ban đầu được thiết kế cho ngôn ngữ C nhưng sau đó có hỗ trợ cả C++ Bên cạnh C/C++, còn hỗ trợ các ngôn ngữ khác như Perl, PHP, Java Ví dụ PHP có extension php_gmp giúp việc sử dụng GMP trở nên rất dễ dàng [tham khảo tại php.net – GMP Functions]
Thư viện GMP có thể dùng trong tính toán cơ bản (cộng, trừ, nhân, chia) các số nguyên, số thực Nhược điểm của GMP là khá khó sử dụng vì phải viết chương trình theo dạng ngôn ngữ bậc thấp, thiếu tính trừu tượng Các hàm cơ bản nhất của GMP có dạng như sau:
Khai báo: mpf_f xf, yf, zf;
Khởi tạo (1): mpf_int(xf);
Khởi tạo (2): mpf_int2(xf, bits);
Giải phóng: mpf_clear(xf);
Thay thế: mpf_set_str(xf, str, base);
Cộng: mpf_add(zf, xf, yf);
Trang 16Trừ: mpf_mul(zf, xf, yf);
Nhân: mpf_mul(zf, xf, yf);
Tuy nhiên khi đã làm quen với các hàm trên thì có thể viết được các chương trình lớn thực hiện các tính toán phức tạp mà không phải lo nghĩ gì tới giới hạn của các con số (GMP dễ dàng tính toán các số có 600 triệu chữ số) [9]
Để cập nhập thông tin về thư viện GMP, có thể xem ở địa chỉ
http://gmplib.org/ Phiên bản mới nhất có thể tìm thấy ở địa chỉ
Khởi tạo danh sách kết thúc là NULL của các biến mpz_t và đặt nó =0
void mpz_init2 (mpz_tx, mp bitcnttn)
Khởi tạo x, với khoảng trống là n bit và đặt giá trị =0 Dùng các hàm này khi mpz_init hoặc mpz_inits không cần thiết
Các hàm gán gán các giá trị mới vào các số nguyên đã được khởi tạo
void mpz_set(mpz_t rop, mpz_t top)
void mpz_set_ui(mpz_t rop, unsigned long int op)
void mpz_set_si(mpz_t rop, signed long int op)