Mật mã là nghệ thuật giao tiếp giữa hai người dùng thông qua các tin nhắn được mã hóa. Khoa học về mật mã xuất hiện với động cơ cơ bản là cung cấp bảo mật cho các thông điệp bí mật được chuyển từ bên này sang bên khác
Mật mã được định nghĩa là nghệ thuật và khoa học che giấu thông điệp để giới thiệu quyền riêng tư và bí mật như được công nhận trong bảo mật thông tin
Thuật ngữ mật mã học
Các thuật ngữ thường được sử dụng trong mật mã được giải thích ở đây -
Văn bản thô
Tin nhắn văn bản thuần túy là văn bản có thể đọc được và có thể được hiểu bởi tất cả người dùng. Văn bản thuần túy là thông điệp trải qua quá trình mã hóa
văn bản mật mã
Văn bản mật mã là thông điệp thu được sau khi áp dụng mật mã trên văn bản thuần túy
mã hóa
Quá trình chuyển đổi văn bản thuần thành văn bản mật mã được gọi là mã hóa. Nó còn được gọi là mã hóa
giải mã
Quá trình chuyển đổi văn bản mật mã thành văn bản thuần túy được gọi là quá trình giải mã. Nó còn được gọi là giải mã
Sơ đồ đưa ra dưới đây cho thấy một minh họa về quá trình mã hóa hoàn chỉnh -
Đặc điểm của mật mã hiện đại
Các đặc điểm cơ bản của mật mã hiện đại như sau -
Nó hoạt động trên các chuỗi bit
Nó sử dụng các thuật toán toán học để bảo mật thông tin
Nó yêu cầu các bên quan tâm đến kênh liên lạc an toàn để đạt được quyền riêng tư
Mã hóa độ mạnh kép, còn được gọi là mã hóa nhiều lần, là quá trình mã hóa một hoặc nhiều lần một văn bản đã được mã hóa, bằng cùng một thuật toán/mẫu khác nhau
Các tên gọi khác của mã hóa cường độ kép bao gồm mã hóa theo tầng hoặc mật mã theo tầng
Các cấp độ mã hóa cường độ kép
Mã hóa cường độ kép bao gồm các mức mã hóa khác nhau được giải thích ở đây dưới –
Lớp mã hóa đầu tiên
Văn bản mật mã được tạo từ thông báo có thể đọc được ban đầu bằng thuật toán băm và khóa đối xứng. Các khóa đối xứng sau này được mã hóa với sự trợ giúp của các khóa bất đối xứng. Minh họa tốt nhất cho mẫu này là kết hợp thông báo băm của văn bản mật mã vào một viên nang. Người nhận sẽ tính toán thông báo trước và sau đó giải mã văn bản để xác minh rằng văn bản không bị giả mạo ở giữa
Lớp mã hóa thứ hai
Lớp mã hóa thứ hai là quá trình thêm một lớp nữa vào văn bản mật mã bằng thuật toán giống hoặc thuật toán khác. Thông thường, mật khẩu đối xứng dài 32 bit được sử dụng cho cùng
Lớp mã hóa thứ ba
Trong quá trình này, gói mã hóa được truyền qua kết nối SSL/TLS tới đối tác liên lạc
Sơ đồ sau đây cho thấy quá trình mã hóa kép bằng hình ảnh –
Mật mã lai
Mật mã lai là quá trình sử dụng nhiều mật mã thuộc các loại khác nhau bằng cách bao gồm các lợi ích của từng mật mã. Có một cách tiếp cận phổ biến thường được áp dụng để tạo khóa bí mật ngẫu nhiên cho mật mã đối xứng và sau đó mã hóa khóa này thông qua mật mã khóa bất đối xứng
Do mẫu này, bản thân thông điệp ban đầu được mã hóa bằng mật mã đối xứng và sau đó sử dụng khóa bí mật. Người nhận sau khi nhận được tin nhắn sẽ giải mã tin nhắn bằng khóa bí mật trước, sử dụng khóa riêng của mình và sau đó sử dụng khóa được chỉ định để giải mã tin nhắn
Python là một ngôn ngữ mã nguồn mở, cấp cao, thông dịch, tương tác và hướng đối tượng. Nó được thiết kế để rất dễ đọc. Cú pháp của ngôn ngữ Python dễ hiểu và thường xuyên sử dụng các từ khóa tiếng Anh
Các tính năng của ngôn ngữ Python
Python cung cấp các tính năng chính sau đây –
Phiên dịch
Python được xử lý trong thời gian chạy bằng trình thông dịch. Không cần biên dịch chương trình trước khi thực hiện. Nó tương tự như PERL và PHP
hướng đối tượng
Python tuân theo phong cách hướng đối tượng và các mẫu thiết kế. Nó bao gồm định nghĩa lớp với các tính năng khác nhau như đóng gói và đa hình
Các điểm chính của ngôn ngữ Python
Các điểm chính của ngôn ngữ lập trình Python như sau –
Nó bao gồm các phương pháp và lập trình chức năng và cấu trúc cũng như các phương pháp lập trình hướng đối tượng
Nó có thể được sử dụng như một ngôn ngữ kịch bản hoặc ngôn ngữ lập trình
Nó bao gồm thu gom rác tự động
Nó bao gồm các kiểu dữ liệu động cấp cao và hỗ trợ kiểm tra kiểu động khác nhau
Python bao gồm một tính năng tích hợp với C, C++ và các ngôn ngữ như Java
Link tải về ngôn ngữ Python như sau − www. con trăn. org/downloadsNó bao gồm các gói dành cho các hệ điều hành khác nhau như các bản phân phối Windows, MacOS và Linux
Chuỗi Python
Khai báo cơ bản của chuỗi được hiển thị bên dưới -
str = 'Hello World!'
Danh sách Python
Danh sách của python có thể được khai báo dưới dạng các kiểu dữ liệu phức hợp, được phân tách bằng dấu phẩy và được đặt trong dấu ngoặc vuông [[]]
list = [ 'abcd', 786 , 2.23, 'john', 70.2 ] tinylist = [123, 'john']
Bộ dữ liệu Python
Một bộ là kiểu dữ liệu động của Python bao gồm một số giá trị được phân tách bằng dấu phẩy. Tuples được kèm theo dấu ngoặc đơn
tinytuple = [123, 'john']
Từ điển Python
Từ điển Python là một loại bảng băm. Khóa từ điển có thể là hầu hết mọi loại dữ liệu của Python, thường là số hoặc chuỗi
tinydict = {'name': 'omkar','code':6734, 'dept': 'sales'}
Gói mật mã
Python bao gồm một gói có tên là mật mã cung cấp các công thức và nguyên hàm mật mã. Nó hỗ trợ Python 2. 7, Trăn 3. 4+ và PyPy 5. 3+. Quá trình cài đặt cơ bản của gói mật mã được thực hiện thông qua lệnh sau -
pip install cryptography
Có nhiều gói khác nhau với cả công thức nấu ăn cấp cao và giao diện cấp thấp cho các thuật toán mã hóa phổ biến như mật mã đối xứng, bản tóm tắt thông báo và hàm dẫn xuất chính
Trong suốt hướng dẫn này, chúng tôi sẽ sử dụng các gói Python khác nhau để triển khai các thuật toán mã hóa
Chương trước đã cung cấp cho bạn tổng quan về cài đặt Python trên máy tính cục bộ của bạn. Trong chương này, bạn sẽ tìm hiểu chi tiết về mật mã ngược và mã hóa của nó
Thuật toán mật mã ngược
Thuật toán mã hóa ngược có các tính năng sau -
Mã hóa ngược sử dụng mô hình đảo ngược chuỗi văn bản thuần túy để chuyển thành văn bản mật mã
Quá trình mã hóa và giải mã giống nhau
Để giải mã bản mã, người dùng chỉ cần đảo ngược bản mã để lấy văn bản thuần túy
Hạn chế
Nhược điểm chính của mật mã ngược là nó rất yếu. Một hacker có thể dễ dàng phá vỡ văn bản mật mã để lấy tin nhắn gốc. Do đó, mật mã ngược không được coi là lựa chọn tốt để duy trì kênh liên lạc an toàn,
Ví dụ
Xem xét một ví dụ trong đó câu lệnh Đây là chương trình để giải thích mật mã ngược sẽ được thực hiện với thuật toán mật mã ngược. Mã python sau đây sử dụng thuật toán để lấy đầu ra
message = 'This is program to explain reverse cipher.' translated = '' #cipher text is stored in this variable i = len[message] - 1 while i >= 0: translated = translated + message[i] i = i - 1 print[“The cipher text is : “, translated]
đầu ra
Bạn có thể thấy văn bản bị đảo ngược, đó là đầu ra như trong hình dưới đây –
Giải trình
Văn bản thuần túy được lưu trữ trong thông báo biến và biến đã dịch được sử dụng để lưu trữ văn bản mật mã được tạo
Độ dài của văn bản thuần túy được tính bằng cách sử dụng vòng lặp for và với sự trợ giúp của số chỉ mục. Các ký tự được lưu trữ trong biến văn bản mật mã đã dịch được in ở dòng cuối cùng
Trong chương trước, chúng ta đã xử lý mật mã ngược. Chương này nói chi tiết về mật mã Caesar
Thuật toán mật mã Caesar
Thuật toán của mật mã Caesar có các tính năng sau -
Kỹ thuật mật mã Caesar là phương pháp đơn giản và dễ dàng của kỹ thuật mã hóa
Nó là loại mật mã thay thế đơn giản
Mỗi chữ cái của văn bản thuần túy được thay thế bằng một chữ cái với một số vị trí cố định xuống theo bảng chữ cái
Sơ đồ sau đây mô tả hoạt động của việc triển khai thuật toán mật mã Caesar -
Việc thực hiện chương trình của thuật toán mật mã Caesar như sau -
def encrypt[text,s]: result = "" # transverse the plain text for i in range[len[text]]: char = text[i] # Encrypt uppercase characters in plain text if [char.isupper[]]: result += chr[[ord[char] + s-65] % 26 + 65] # Encrypt lowercase characters in plain text else: result += chr[[ord[char] + s - 97] % 26 + 97] return result #check the above function text = "CEASER CIPHER DEMO" s = 4 print "Plain Text : " + text print "Shift pattern : " + str[s] print "Cipher: " + encrypt[text,s]
đầu ra
Bạn có thể thấy mật mã Caesar, đó là đầu ra như trong hình dưới đây -
Giải trình
Ký tự văn bản thuần túy được duyệt qua từng ký tự một
Đối với mỗi ký tự trong văn bản thuần nhất định, hãy biến đổi ký tự đã cho theo quy tắc tùy thuộc vào quy trình mã hóa và giải mã văn bản
Sau khi làm theo các bước, một chuỗi mới được tạo ra được gọi là văn bản mật mã
Hack thuật toán mật mã Caesar
Văn bản mật mã có thể bị tấn công với nhiều khả năng khác nhau. Một trong những khả năng như vậy là Kỹ thuật Brute Force, liên quan đến việc thử mọi khóa giải mã có thể. Kỹ thuật này không đòi hỏi nhiều nỗ lực và tương đối đơn giản đối với một hacker.
Việc triển khai chương trình để hack thuật toán mật mã Caesar như sau -
message = 'GIEWIVrGMTLIVrHIQS' #encrypted message LETTERS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' for key in range[len[LETTERS]]: translated = '' for symbol in message: if symbol in LETTERS: num = LETTERS.find[symbol] num = num - key if num < 0: num = num + len[LETTERS] translated = translated + LETTERS[num] else: translated = translated + symbol print['Hacking key #%s: %s' % [key, translated]]
Xem xét văn bản mật mã được mã hóa trong ví dụ trước. Sau đó, đầu ra với các phương pháp hack có thể có bằng khóa và sử dụng kỹ thuật tấn công vũ phu như sau -
Đến đây các bạn đã được học về thuật toán mã hóa ngược và thuật toán mã hóa Caesar. Bây giờ, chúng ta hãy thảo luận về thuật toán ROT13 và cách triển khai thuật toán này
Giải thích thuật toán ROT13
Mật mã ROT13 đề cập đến dạng viết tắt Xoay theo 13 vị trí. Đây là trường hợp đặc biệt của Mật mã Caesar trong đó shift luôn là 13. Mỗi chữ cái được dịch chuyển 13 vị trí để mã hóa hoặc giải mã tin nhắn
Ví dụ
Sơ đồ sau đây giải thích quá trình thuật toán ROT13 bằng hình ảnh –
Mã chương trình
Chương trình triển khai thuật toán ROT13 như sau -
________số 8_______Bạn có thể thấy đầu ra ROT13 như trong hình dưới đây –
Hạn chế
Thuật toán ROT13 sử dụng 13 ca. Do đó, rất dễ dàng dịch chuyển các ký tự theo cách ngược lại để giải mã văn bản mật mã.
Phân tích thuật toán ROT13
Thuật toán mật mã ROT13 được coi là trường hợp đặc biệt của Mật mã Caesar. Nó không phải là một thuật toán rất an toàn và có thể bị phá vỡ dễ dàng bằng phân tích tần số hoặc chỉ bằng cách thử 25 phím có thể trong khi ROT13 có thể bị phá vỡ bằng cách dịch chuyển 13 vị trí. Do đó, nó không bao gồm bất kỳ ứng dụng thực tế nào
Mật mã chuyển vị là một thuật toán mật mã trong đó thứ tự của các bảng chữ cái trong bản rõ được sắp xếp lại để tạo thành một văn bản mật mã. Trong quá trình này, các bảng chữ cái văn bản thuần túy thực tế không được bao gồm
Ví dụ
Một ví dụ đơn giản cho mật mã chuyển vị là mật mã chuyển vị cột trong đó mỗi ký tự trong văn bản thuần túy được viết theo chiều ngang với chiều rộng bảng chữ cái được chỉ định. Mật mã được viết theo chiều dọc, điều này tạo ra một văn bản mật mã hoàn toàn khác
Hãy xem xét văn bản đơn giản xin chào thế giới và chúng ta hãy áp dụng kỹ thuật chuyển vị cột đơn giản như hình bên dưới
Các ký tự văn bản thường được đặt theo chiều ngang và bản mã được tạo với định dạng dọc như. lỗ hổng lr. Bây giờ, người nhận phải sử dụng cùng một bảng để giải mã văn bản mật mã thành văn bản thuần túy
Mã số
Đoạn mã chương trình sau minh họa cách triển khai cơ bản của kỹ thuật chuyển vị cột -
def split_len[seq, length]: return [seq[i:i + length] for i in range[0, len[seq], length]] def encode[key, plaintext]: order = { int[val]: num for num, val in enumerate[key] } ciphertext = '' for index in sorted[order.keys[]]: for part in split_len[plaintext, len[key]]: try:ciphertext += part[order[index]] except IndexError: continue return ciphertext print[encode['3214', 'HELLO']]
Giải trình
Sử dụng hàm split_len[], chúng ta có thể chia các ký tự văn bản thuần túy, có thể được đặt ở định dạng cột hoặc hàng
Phương pháp mã hóa giúp tạo bản mã với khóa xác định số lượng cột và in bản mã bằng cách đọc các ký tự qua từng cột
đầu ra
Mã chương trình để triển khai cơ bản kỹ thuật chuyển vị cột cho đầu ra sau -
Lưu ý - Các nhà phân tích mật mã đã quan sát thấy sự cải thiện đáng kể về bảo mật tiền điện tử khi kỹ thuật chuyển vị được thực hiện. Họ cũng lưu ý rằng việc mã hóa lại văn bản mật mã bằng cách sử dụng cùng một mật mã chuyển vị sẽ tạo ra khả năng bảo mật tốt hơn
Trong chương trước, chúng ta đã tìm hiểu về Mã chuyển vị. Trong chương này, chúng ta hãy thảo luận về mã hóa của nó
kẹp kim loại
Cách sử dụng chính của plugin pyperclip trong ngôn ngữ lập trình Python là thực hiện mô-đun đa nền tảng để sao chép và dán văn bản vào khay nhớ tạm. Bạn có thể cài đặt mô-đun pyperclip python bằng lệnh như được hiển thị
list = [ 'abcd', 786 , 2.23, 'john', 70.2 ] tinylist = [123, 'john']0
Nếu yêu cầu đã tồn tại trong hệ thống, bạn có thể thấy đầu ra sau -
Mã số
Mã python để mã hóa mật mã chuyển vị trong đó pyperclip là mô-đun chính như bên dưới -
list = [ 'abcd', 786 , 2.23, 'john', 70.2 ] tinylist = [123, 'john']1
đầu ra
Mã chương trình để mã hóa mật mã chuyển vị trong đó pyperclip là mô-đun chính cung cấp đầu ra sau -
Giải trình
Hàm main[] gọi đến EncryptMessage[] bao gồm thủ tục tách các ký tự bằng cách sử dụng hàm len và lặp lại chúng theo định dạng cột
Chức năng chính được khởi tạo ở cuối để có đầu ra phù hợp
Trong chương này, bạn sẽ tìm hiểu quy trình giải mã mật mã chuyển vị
Mã số
Quan sát đoạn mã sau để hiểu rõ hơn về việc giải mã một mật mã chuyển vị. Văn bản mật mã cho thông báo Mã chuyển vị với khóa là 6 được tìm nạp dưới dạng Toners raiCntisippoh
list = [ 'abcd', 786 , 2.23, 'john', 70.2 ] tinylist = [123, 'john']2
Giải trình
Bản mã và khóa nói trên là hai giá trị được lấy làm tham số đầu vào để giải mã hoặc giải mã bản mã theo kỹ thuật đảo ngược bằng cách đặt các ký tự theo định dạng cột và đọc theo chiều ngang.
Bạn có thể đặt các chữ cái ở định dạng cột và sau đó kết hợp hoặc nối chúng lại với nhau bằng đoạn mã sau –
list = [ 'abcd', 786 , 2.23, 'john', 70.2 ] tinylist = [123, 'john']3
đầu ra
Mã chương trình để giải mã mật mã chuyển vị cho đầu ra sau -
Trong Python, có thể mã hóa và giải mã tệp trước khi truyền sang kênh liên lạc. Đối với điều này, bạn sẽ phải sử dụng plugin PyCrypto. Bạn có thể cài đặt plugin này bằng lệnh được cung cấp bên dưới
list = [ 'abcd', 786 , 2.23, 'john', 70.2 ] tinylist = [123, 'john']4
Mã
Mã chương trình để mã hóa tệp bằng trình bảo vệ mật khẩu được đề cập bên dưới -
list = [ 'abcd', 786 , 2.23, 'john', 70.2 ] tinylist = [123, 'john']5
Bạn có thể sử dụng lệnh sau để thực hiện quá trình mã hóa cùng với mật khẩu –
list = [ 'abcd', 786 , 2.23, 'john', 70.2 ] tinylist = [123, 'john']6
đầu ra
Bạn có thể quan sát đầu ra sau khi thực thi đoạn mã trên -
Giải trình
Mật khẩu được tạo bằng thuật toán băm MD5 và các giá trị được lưu trữ trong các tệp sao lưu an toàn đơn giản trong hệ thống Windows, bao gồm các giá trị như được hiển thị bên dưới -
Trong chương này, chúng ta hãy thảo luận về việc giải mã các tệp trong mật mã bằng Python. Lưu ý rằng đối với quá trình giải mã, chúng tôi sẽ làm theo quy trình tương tự, nhưng thay vì chỉ định đường dẫn đầu ra, chúng tôi sẽ tập trung vào đường dẫn đầu vào hoặc tệp cần thiết được mã hóa
Mã số
Sau đây là mã mẫu để giải mã các tệp trong mật mã bằng Python –
list = [ 'abcd', 786 , 2.23, 'john', 70.2 ] tinylist = [123, 'john']7
Bạn có thể sử dụng lệnh sau để thực thi đoạn mã trên -
list = [ 'abcd', 786 , 2.23, 'john', 70.2 ] tinylist = [123, 'john']8
đầu ra
Bạn có thể quan sát đoạn mã sau khi thực hiện lệnh hiển thị ở trên -
Lưu ý - Đầu ra chỉ định các giá trị băm trước khi mã hóa và sau khi giải mã, lưu ý rằng cùng một tệp được mã hóa và quá trình này đã thành công
Mã hóa Base64 chuyển đổi dữ liệu nhị phân thành định dạng văn bản, được truyền qua kênh liên lạc nơi người dùng có thể xử lý văn bản một cách an toàn. Base64 còn được gọi là Thư điện tử nâng cao quyền riêng tư [PEM] và chủ yếu được sử dụng trong quy trình mã hóa email
Python bao gồm một mô-đun có tên là BASE64 bao gồm hai chức năng chính như bên dưới -
cơ sở64. giải mã [đầu vào, đầu ra] - Nó giải mã tham số giá trị đầu vào được chỉ định và lưu trữ đầu ra đã giải mã dưới dạng một đối tượng
cơ sở64. mã hóa [đầu vào, đầu ra] - Nó mã hóa tham số giá trị đầu vào được chỉ định và lưu trữ đầu ra được giải mã dưới dạng một đối tượng
Chương trình mã hóa
Bạn có thể sử dụng đoạn mã sau để thực hiện mã hóa base64 -
list = [ 'abcd', 786 , 2.23, 'john', 70.2 ] tinylist = [123, 'john']9
đầu ra
Mã cho mã hóa base64 cung cấp cho bạn đầu ra sau -
Chương trình giải mã
Bạn có thể sử dụng đoạn mã sau để thực hiện giải mã base64 -
tinytuple = [123, 'john']0
đầu ra
Mã giải mã base64 cung cấp cho bạn đầu ra sau -
Sự khác biệt giữa ASCII và base64
Bạn có thể quan sát những khác biệt sau khi làm việc trên ASCII và base64 để mã hóa dữ liệu -
Khi bạn mã hóa văn bản trong ASCII, bạn bắt đầu với một chuỗi văn bản và chuyển đổi nó thành một chuỗi byte
Khi bạn mã hóa dữ liệu trong Base64, bạn bắt đầu với một chuỗi byte và chuyển đổi nó thành chuỗi văn bản
Hạn chế
Thuật toán Base64 thường được sử dụng để lưu trữ mật khẩu trong cơ sở dữ liệu. Hạn chế chính là mỗi từ được giải mã có thể được mã hóa dễ dàng thông qua bất kỳ công cụ trực tuyến nào và những kẻ xâm nhập có thể dễ dàng lấy thông tin
Trong chương này, chúng ta hãy hiểu quy trình XOR cùng với mã hóa của nó trong Python
thuật toán
Thuật toán mã hóa và giải mã XOR chuyển đổi văn bản thuần túy ở định dạng byte ASCII và sử dụng thủ tục XOR để chuyển đổi nó thành một byte được chỉ định. Nó cung cấp những ưu điểm sau cho người dùng –
- tính toán nhanh
- Không có sự khác biệt được đánh dấu ở bên trái và bên phải
- Dễ hiểu và dễ phân tích
Mã số
Bạn có thể sử dụng đoạn mã sau để thực hiện quy trình XOR -
tinytuple = [123, 'john']1
đầu ra
Mã cho quy trình XOR cung cấp cho bạn đầu ra sau -
Giải trình
Hàm xor_crypt_string[] bao gồm một tham số để chỉ định chế độ mã hóa và giải mã cũng như giá trị chuỗi
Các chức năng cơ bản được thực hiện với các mô-đun base64 tuân theo thủ tục/hoạt động XOR để mã hóa hoặc giải mã văn bản thuần túy/văn bản mật mã
Lưu ý - Mã hóa XOR được sử dụng để mã hóa dữ liệu và khó bị bẻ khóa bằng phương pháp brute-force, nghĩa là bằng cách tạo các khóa mã hóa ngẫu nhiên để khớp với văn bản mật mã chính xác
Trong khi sử dụng kỹ thuật mật mã Caesar, việc mã hóa và giải mã các ký hiệu liên quan đến việc chuyển đổi các giá trị thành số bằng một quy trình cộng hoặc trừ cơ bản đơn giản.
Nếu phép nhân được sử dụng để chuyển đổi thành văn bản mật mã, nó được gọi là tình huống bao quanh. Xem xét các chữ cái và các số liên quan sẽ được sử dụng như hình dưới đây -
Các số sẽ được sử dụng cho quy trình nhân và khóa liên quan là 7. Công thức cơ bản được sử dụng trong trường hợp như vậy để tạo mật mã nhân như sau -
tinytuple = [123, 'john']2
Số được tìm nạp thông qua đầu ra được ánh xạ trong bảng được đề cập ở trên và chữ cái tương ứng được coi là chữ cái được mã hóa
Hàm điều chế cơ bản của mật mã nhân trong Python như sau -
tinytuple = [123, 'john']3
Lưu ý - Ưu điểm của mật mã nhân là nó có thể hoạt động với các khóa rất lớn như 8.953.851. Sẽ mất khá nhiều thời gian để một máy tính có thể brute-force thông qua phần lớn chín triệu khóa
Mật mã Affine là sự kết hợp giữa Mật mã nhân và thuật toán Mật mã Caesar. Việc triển khai cơ bản của mật mã affine như trong hình dưới đây -
Trong chương này, chúng ta sẽ thực hiện mật mã affine bằng cách tạo lớp tương ứng của nó bao gồm hai chức năng cơ bản để mã hóa và giải mã
Mã số
Bạn có thể sử dụng đoạn mã sau để triển khai mật mã affine -
tinytuple = [123, 'john']4
đầu ra
Bạn có thể quan sát đầu ra sau khi triển khai mật mã affine -
Đầu ra hiển thị tin nhắn được mã hóa cho tin nhắn văn bản thuần túy Mật mã Affine và tin nhắn được giải mã cho tin nhắn được gửi dưới dạng đầu vào abcdefg
Trong chương này, bạn sẽ tìm hiểu về mật mã đơn ký tự và cách hack nó bằng Python
Mật mã đơn chữ cái
Một mật mã Monoalphabetic sử dụng một thay thế cố định để mã hóa toàn bộ tin nhắn. Một mật mã dùng một bảng chữ cái sử dụng từ điển Python với các đối tượng JSON được hiển thị ở đây -
tinytuple = [123, 'john']5
Với sự trợ giúp của từ điển này, chúng ta có thể mã hóa các chữ cái bằng các chữ cái được liên kết thành các giá trị trong đối tượng JSON. Chương trình sau tạo một chương trình đơn chữ cái dưới dạng biểu diễn lớp bao gồm tất cả các chức năng mã hóa và giải mã
tinytuple = [123, 'john']6
Tệp này được gọi sau để thực hiện quá trình mã hóa và giải mã của mật mã Monoalphabetic được đề cập như sau -
tinytuple = [123, 'john']7
đầu ra
Bạn có thể quan sát kết quả đầu ra sau đây khi triển khai mã ở trên -
Do đó, bạn có thể hack một mật mã đơn bảng chữ cái với cặp giá trị khóa được chỉ định để bẻ khóa văn bản mật mã thành văn bản thuần túy thực tế
Mật mã thay thế đơn giản là mật mã được sử dụng phổ biến nhất và bao gồm một thuật toán thay thế mọi ký tự văn bản thuần cho mọi ký tự văn bản mật mã. Trong quá trình này, các bảng chữ cái bị xáo trộn so với thuật toán mật mã Caesar
Ví dụ
Các khóa cho mật mã thay thế đơn giản thường bao gồm 26 chữ cái. Một khóa ví dụ là -
tinytuple = [123, 'john']8
Một mã hóa ví dụ sử dụng khóa trên là−
tinytuple = [123, 'john']9
Đoạn mã sau trình bày một chương trình để thực hiện mật mã thay thế đơn giản -
tinydict = {'name': 'omkar','code':6734, 'dept': 'sales'}0
đầu ra
Bạn có thể quan sát kết quả đầu ra sau đây khi triển khai mã ở trên -
Trong chương này, chúng ta sẽ tập trung vào kiểm tra mật mã thay thế bằng các phương pháp khác nhau, giúp tạo ra các chuỗi ngẫu nhiên như dưới đây -
tinydict = {'name': 'omkar','code':6734, 'dept': 'sales'}1
đầu ra
Bạn có thể quan sát đầu ra dưới dạng các chuỗi được tạo ngẫu nhiên giúp tạo các tin nhắn văn bản thuần túy ngẫu nhiên, như được hiển thị bên dưới -
Sau khi kiểm tra hoàn tất thành công, chúng ta có thể quan sát thông báo đầu ra Kiểm tra thay thế đã thông qua
Vì vậy, bạn có thể hack một mật mã thay thế một cách có hệ thống
Trong chương này, bạn có thể tìm hiểu về cách triển khai đơn giản của mật mã thay thế hiển thị thông báo được mã hóa và giải mã theo logic được sử dụng trong kỹ thuật mật mã thay thế đơn giản. Đây có thể được coi là một cách tiếp cận thay thế của mã hóa
Mã số
Bạn có thể sử dụng đoạn mã sau để thực hiện giải mã bằng mật mã thay thế đơn giản -
tinydict = {'name': 'omkar','code':6734, 'dept': 'sales'}2
đầu ra
Đoạn mã trên cung cấp cho bạn đầu ra như được hiển thị ở đây -
Trong chương này, bạn sẽ tìm hiểu chi tiết về các mô-đun mật mã khác nhau trong Python
Mô-đun mật mã
Nó bao gồm tất cả các công thức và nguyên hàm, đồng thời cung cấp giao diện mã hóa cấp cao trong Python. Bạn có thể cài đặt mô-đun mật mã bằng lệnh sau –
pip install cryptography
Mã
Bạn có thể sử dụng đoạn mã sau để triển khai mô-đun mật mã -
tinydict = {'name': 'omkar','code':6734, 'dept': 'sales'}4
đầu ra
Mã được cung cấp ở trên tạo ra đầu ra sau -
Mã được cung cấp ở đây được sử dụng để xác minh mật khẩu và tạo hàm băm của nó. Nó cũng bao gồm logic để xác minh mật khẩu cho mục đích xác thực
tinydict = {'name': 'omkar','code':6734, 'dept': 'sales'}5
đầu ra
Tình huống 1 – Nếu bạn đã nhập đúng mật khẩu, bạn có thể tìm thấy kết quả sau –
Tình huống 2 - Nếu chúng tôi nhập sai mật khẩu, bạn có thể tìm thấy đầu ra sau -
Giải trình
Gói Hashlib được sử dụng để lưu trữ mật khẩu trong cơ sở dữ liệu. Trong chương trình này, muối được sử dụng để thêm một chuỗi ngẫu nhiên vào chuỗi mật khẩu trước khi thực hiện hàm băm
Mật mã Vigenere bao gồm một bước ngoặt với thuật toán Mật mã Caesar được sử dụng để mã hóa và giải mã. Mật mã Vigenere hoạt động tương tự như thuật toán Mật mã Caesar chỉ có một điểm khác biệt chính. Mật mã Caesar bao gồm thuật toán cho sự dịch chuyển một ký tự, trong khi Mật mã Vignere bao gồm khóa với sự dịch chuyển nhiều bảng chữ cái
Phương trình toán học
Đối với mã hóa, phương trình toán học như sau -
$$E_{k}\left [ M{_{i{}}} \right ] = \left [ M_{i}+K_{i} \right ]\;\;\;
Để giải mã, phương trình toán học như sau -
$$D_{k}\left [ C{_{i{}}} \right ] = \left [ C_{i}-K_{i} \right ]\;\;\;
Mật mã Vigenere sử dụng nhiều hơn một bộ thay thế, và do đó nó còn được gọi là mật mã đa bảng chữ cái. Vigenere Cipher sẽ sử dụng khóa chữ cái thay vì biểu diễn khóa số. Chữ A sẽ được sử dụng cho phím 0, chữ B cho phím 1, v.v. Số của các chữ cái trước và sau quá trình mã hóa được hiển thị bên dưới -
Sự kết hợp có thể có của số lượng khóa có thể dựa trên độ dài khóa Vignere được đưa ra như sau, cho kết quả về mức độ an toàn của Thuật toán mật mã Vignere −
Hoạt cảnh Vigenere
Hoạt cảnh được sử dụng cho mật mã Vignere như dưới đây -
Trong chương này, chúng ta hãy hiểu làm thế nào để thực hiện mật mã Vigenere. Xem xét văn bản Đây là triển khai cơ bản của Mật mã Vignere được mã hóa và khóa được sử dụng là PIZZA
Mã số
Bạn có thể sử dụng đoạn mã sau để triển khai mật mã Vignere trong Python –
tinydict = {'name': 'omkar','code':6734, 'dept': 'sales'}6
đầu ra
Bạn có thể quan sát kết quả đầu ra sau đây khi triển khai mã ở trên -
Các kết hợp khả thi của việc hack mật mã Vignere là không thể. Do đó, nó được coi là một chế độ mã hóa an toàn
Mật mã bàn phím một lần là một loại mật mã Vignere bao gồm các tính năng sau -
Đó là một mật mã không thể phá vỡ
Khóa chính xác giống như độ dài của tin nhắn được mã hóa
Chìa khóa được tạo thành từ các ký hiệu ngẫu nhiên
Như tên gợi ý, khóa chỉ được sử dụng một lần và không bao giờ được sử dụng lại cho bất kỳ tin nhắn nào khác được mã hóa
Do đó, tin nhắn được mã hóa sẽ dễ bị tấn công đối với nhà phân tích mật mã. Khóa được sử dụng cho mật mã pad dùng một lần được gọi là pad, vì nó được in trên các miếng giấy
Tại sao nó không thể phá vỡ?
Chìa khóa không thể phá vỡ nhờ các tính năng sau –
Chìa khóa dài bằng thông điệp đã cho
Chìa khóa thực sự ngẫu nhiên và được tạo tự động đặc biệt
Khóa và văn bản thuần túy được tính theo modulo 26/10/2
Mỗi khóa nên được sử dụng một lần và bị hủy bởi cả người gửi và người nhận
Nên có hai bản sao của khóa. một với người gửi và một với người nhận
mã hóa
Để mã hóa một chữ cái, người dùng cần viết một khóa bên dưới bản rõ. Chữ cái bản rõ được đặt ở trên cùng và chữ khóa ở bên trái. Mặt cắt đạt được giữa hai chữ cái là văn bản thuần túy. Nó được mô tả trong ví dụ dưới đây -
giải mã
Để giải mã một chữ cái, người dùng lấy chữ cái khóa bên trái và tìm chữ cái bản mã trong hàng đó. Chữ thường được đặt ở đầu cột nơi người dùng có thể tìm thấy chữ mật mã
Python bao gồm một mô-đun triển khai hacky để triển khai mật mã một lần. Tên gói được gọi là One-Time-Pad bao gồm một công cụ mã hóa dòng lệnh sử dụng cơ chế mã hóa tương tự như thuật toán mã hóa bảng một lần
Cài đặt
Bạn có thể sử dụng lệnh sau để cài đặt mô-đun này -
tinydict = {'name': 'omkar','code':6734, 'dept': 'sales'}7
Nếu bạn muốn sử dụng nó từ dòng lệnh, hãy chạy lệnh sau -
______3_______8Mã
Đoạn mã sau giúp tạo mật mã bảng một lần -
tinydict = {'name': 'omkar','code':6734, 'dept': 'sales'}9
đầu ra
Bạn có thể quan sát đầu ra sau khi chạy đoạn mã trên -
Lưu ý - Tin nhắn được mã hóa rất dễ bị bẻ khóa nếu độ dài của khóa nhỏ hơn độ dài của tin nhắn [văn bản thuần túy]
Trong mọi trường hợp, khóa không nhất thiết phải là ngẫu nhiên, điều này làm cho mật mã bàn phím một lần trở thành một công cụ đáng giá
Trong chương này, chúng ta hãy thảo luận chi tiết về mật mã đối xứng và bất đối xứng
Mật mã đối xứng
Trong loại này, quá trình mã hóa và giải mã sử dụng cùng một khóa. Nó còn được gọi là mật mã khóa bí mật. Các tính năng chính của mật mã đối xứng như sau -
- Nó đơn giản hơn và nhanh hơn
- Hai bên trao đổi chìa khóa một cách an toàn
Hạn chế
Hạn chế chính của mật mã đối xứng là nếu khóa bị rò rỉ cho kẻ xâm nhập, thông điệp có thể dễ dàng thay đổi và đây được coi là một yếu tố rủi ro
Tiêu chuẩn mã hóa dữ liệu [DES]
Thuật toán khóa đối xứng phổ biến nhất là Tiêu chuẩn mã hóa dữ liệu [DES] và Python bao gồm một gói bao gồm logic đằng sau thuật toán DES
Cài đặt
Lệnh cài đặt gói DES pyDES trong Python là -
pip install cryptography0
Việc triển khai chương trình đơn giản của thuật toán DES như sau −
pip install cryptography1
Nó yêu cầu biến padmode tìm nạp tất cả các gói theo triển khai thuật toán DES và tuân theo quá trình mã hóa và giải mã theo một cách được chỉ định
đầu ra
Bạn có thể thấy đầu ra sau đây là kết quả của đoạn mã được cung cấp ở trên -
Mật mã bất đối xứng
Nó còn được gọi là mật mã khóa công khai. Nó hoạt động theo cách ngược lại của mật mã đối xứng. Điều này ngụ ý rằng nó yêu cầu hai khóa. một để mã hóa và một để giải mã. Khóa công khai được sử dụng để mã hóa và khóa riêng được sử dụng để giải mã
Hạn chế
- Do độ dài khóa của nó, nó góp phần làm giảm tốc độ mã hóa
- Quản lý khóa là rất quan trọng
Mã chương trình sau bằng Python minh họa hoạt động của mật mã bất đối xứng bằng thuật toán RSA và cách triển khai thuật toán này –
pip install cryptography2
đầu ra
Bạn có thể tìm thấy đầu ra sau khi thực thi mã được cung cấp ở trên -
Thuật toán RSA là một kỹ thuật mã hóa khóa công khai và được coi là cách mã hóa an toàn nhất. Nó được phát minh bởi Rivest, Shamir và Adleman vào năm 1978 và do đó đặt tên là thuật toán RSA
thuật toán
Thuật toán RSA giữ các tính năng sau -
Thuật toán RSA là một phép lũy thừa phổ biến trong trường hữu hạn trên các số nguyên kể cả số nguyên tố
Các số nguyên được sử dụng bởi phương pháp này đủ lớn nên khó giải
Có hai bộ khóa trong thuật toán này. khóa riêng và khóa chung
Bạn sẽ phải thực hiện các bước sau để làm việc với thuật toán RSA –
Bước 1. Tạo mô-đun RSA
Quy trình ban đầu bắt đầu bằng việc chọn hai số nguyên tố là p và q, sau đó tính tích N của chúng, như được hiển thị -
pip install cryptography3
Ở đây, đặt N là số lớn được chỉ định
Bước 2. Số dẫn xuất [e]
Coi số e là số dẫn xuất phải lớn hơn 1 và nhỏ hơn [p-1] và [q-1]. Điều kiện chính sẽ là không có ước chung của [p-1] và [q-1] ngoại trừ 1
Bước 3. Khóa công khai
Cặp số n và e được chỉ định tạo thành khóa công khai RSA và nó được công khai
Bước 4. Khóa riêng
Khóa riêng d được tính từ các số p, q và e. Mối quan hệ toán học giữa các số như sau -
pip install cryptography4
Công thức trên là công thức cơ bản cho Thuật toán Euclide mở rộng, lấy p và q làm tham số đầu vào
Công thức mã hóa
Hãy xem xét một người gửi gửi tin nhắn văn bản thuần túy cho ai đó có khóa công khai là [n,e]. Để mã hóa tin nhắn văn bản thuần túy trong tình huống đã cho, hãy sử dụng cú pháp sau -
pip install cryptography5
Công thức giải mã
Quá trình giải mã rất đơn giản và bao gồm các phân tích để tính toán theo cách tiếp cận có hệ thống. Xem xét người nhận C có khóa riêng d, mô-đun kết quả sẽ được tính là -
pip install cryptography6
Trong chương này, chúng ta sẽ tập trung vào từng bước triển khai thuật toán RSA bằng Python
Tạo khóa RSA
Các bước sau đây liên quan đến việc tạo khóa RSA -
Tạo hai số nguyên tố lớn là p và q. Tích của những số này sẽ được gọi là n, trong đó n= p*q
Tạo một số ngẫu nhiên nguyên tố cùng nhau với [p-1] và [q-1]. Gọi số đó là e
Tính nghịch đảo mô-đun của e. Nghịch đảo tính toán sẽ được gọi là d
Các thuật toán tạo khóa RSA
Chúng tôi cần hai thuật toán chính để tạo khóa RSA bằng mô-đun Python − Cryptomath và mô-đun Rabin Miller
Mô-đun mật mã
Mã nguồn của mô-đun mật mã tuân theo tất cả triển khai cơ bản của thuật toán RSA như sau:
pip install cryptography7
Mô-đun RabinMiller
Mã nguồn của mô-đun RabinMiller tuân theo tất cả triển khai cơ bản của thuật toán RSA như sau:
pip install cryptography8
Mã hoàn chỉnh để tạo khóa RSA như sau -
pip install cryptography9
đầu ra
Khóa chung và khóa riêng được tạo và lưu trong các tệp tương ứng như được hiển thị trong đầu ra sau
Trong chương này, chúng ta sẽ tập trung vào việc triển khai mã hóa mật mã RSA khác nhau và các chức năng liên quan cho cùng một mã hóa. Bạn có thể tham khảo hoặc đưa vào file python này để thực hiện triển khai thuật toán mật mã RSA
Các mô-đun được bao gồm cho thuật toán mã hóa như sau -
message = 'This is program to explain reverse cipher.' translated = '' #cipher text is stored in this variable i = len[message] - 1 while i >= 0: translated = translated + message[i] i = i - 1 print[“The cipher text is : “, translated]0
Chúng tôi đã khởi tạo giá trị băm là SHA-256 nhằm mục đích bảo mật tốt hơn. Chúng tôi sẽ sử dụng một chức năng để tạo khóa mới hoặc một cặp khóa chung và khóa riêng bằng mã sau
message = 'This is program to explain reverse cipher.' translated = '' #cipher text is stored in this variable i = len[message] - 1 while i >= 0: translated = translated + message[i] i = i - 1 print[“The cipher text is : “, translated]1
Để mã hóa, hàm sau được sử dụng tuân theo thuật toán RSA -
message = 'This is program to explain reverse cipher.' translated = '' #cipher text is stored in this variable i = len[message] - 1 while i >= 0: translated = translated + message[i] i = i - 1 print[“The cipher text is : “, translated]2
Hai tham số là bắt buộc. tin nhắn và pub_key đề cập đến khóa Công khai. Khóa công khai được sử dụng để mã hóa và khóa riêng được sử dụng để giải mã
Chương trình hoàn chỉnh cho quy trình mã hóa được đề cập bên dưới -
message = 'This is program to explain reverse cipher.' translated = '' #cipher text is stored in this variable i = len[message] - 1 while i >= 0: translated = translated + message[i] i = i - 1 print[“The cipher text is : “, translated]3
Chương này là phần tiếp theo của chương trước, nơi chúng ta đã theo dõi từng bước triển khai mã hóa khôn ngoan bằng thuật toán RSA và thảo luận chi tiết về nó
Hàm được sử dụng để giải mã văn bản mật mã như sau -
message = 'This is program to explain reverse cipher.' translated = '' #cipher text is stored in this variable i = len[message] - 1 while i >= 0: translated = translated + message[i] i = i - 1 print[“The cipher text is : “, translated]4
Đối với mật mã khóa công khai hoặc mật mã khóa bất đối xứng, điều quan trọng là phải duy trì hai tính năng quan trọng là Xác thực và Ủy quyền
ủy quyền
Ủy quyền là quá trình xác nhận rằng người gửi là người duy nhất đã truyền thông điệp. Đoạn mã sau giải thích điều này -
message = 'This is program to explain reverse cipher.' translated = '' #cipher text is stored in this variable i = len[message] - 1 while i >= 0: translated = translated + message[i] i = i - 1 print[“The cipher text is : “, translated]5
xác thực
Có thể xác thực bằng phương pháp xác minh được giải thích như bên dưới -
message = 'This is program to explain reverse cipher.' translated = '' #cipher text is stored in this variable i = len[message] - 1 while i >= 0: translated = translated + message[i] i = i - 1 print[“The cipher text is : “, translated]6
Chữ ký điện tử được xác minh cùng với các chi tiết của người gửi và người nhận. Điều này bổ sung thêm tuổi cân nặng cho mục đích bảo mật
Giải mã mật mã RSA
Bạn có thể sử dụng đoạn mã sau để giải mã mật mã RSA −
message = 'This is program to explain reverse cipher.' translated = '' #cipher text is stored in this variable i = len[message] - 1 while i >= 0: translated = translated + message[i] i = i - 1 print[“The cipher text is : “, translated]7
Có thể hack mật mã RSA với các số nguyên tố nhỏ, nhưng được coi là không thể nếu nó được sử dụng với các số lớn. Những lý do chỉ rõ lý do tại sao rất khó để hack mật mã RSA như sau –
Tấn công vũ phu sẽ không hoạt động vì có quá nhiều khóa có thể thực hiện được. Ngoài ra, điều này tiêu tốn rất nhiều thời gian
Tấn công từ điển sẽ không hoạt động trong thuật toán RSA vì các khóa là số và không bao gồm bất kỳ ký tự nào trong đó
Phân tích tần số của các ký tự rất khó theo dõi vì một khối được mã hóa duy nhất đại diện cho các ký tự khác nhau
Không có thủ thuật toán học cụ thể nào để hack mật mã RSA
Phương trình giải mã RSA là -
message = 'This is program to explain reverse cipher.' translated = '' #cipher text is stored in this variable i = len[message] - 1 while i >= 0: translated = translated + message[i] i = i - 1 print[“The cipher text is : “, translated]8
Với sự trợ giúp của các số nguyên tố nhỏ, chúng ta có thể thử hack mật mã RSA và mã mẫu cho điều tương tự được đề cập bên dưới -