TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN ĐIỆN TỬ VIỄN THÔNG ~~~~~~~~~~~~ BÁO CÁO Thông Tin Di Động Đề tài THỰC HIỆN HỆ THỐNG TRUYỀN TIN BẢO MẬT SỬ DỤNG MÃ HOÁ AES VÀ ĐIỀU CHẾ QPSK Giáo viên hướng dẫn T s.
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN ĐIỆN TỬ- VIỄN THƠNG ~~~~~~*~~~~~~ BÁO CÁO Thơng Tin Di Động Đề tài: THỰC HIỆN HỆ THỐNG TRUYỀN TIN BẢO MẬT SỬ DỤNG MÃ HOÁ AES VÀ ĐIỀU CHẾ QPSK Giáo viên hướng dẫn : T.s Nguyễn Văn Đức Nhóm thực : Nhóm 16 Huy : 20172578 Thành Viên Phùng Hồng Phùng Tiến Đạt : 20172456 Vũ Trọng Tùng : 20172902 HÀ NỘI - 2021 MỤC LỤC DANH MỤC HÌNH ẢNH ĐIỀU CHẾ VÀ GIẢI ĐIỀU CHẾ QPSK 1.1 Điều chế số 1.2 Các phương pháp điều chế số thông dụng 1.3 Điều chế QPSK .4 1.3.1 Điều chế 1.3.2 Bộ dao động 1.3.3 Mô điều chế 1.3.4 White noise 1.3.5 Giải điều chế 1.3.6 Kiểm tra .10 HỆ MẬT AES 11 2.1 Mã hóa AES - 128 bit 11 2.1.1 Chức AddRoundKey 12 2.1.2 Chức SubBytes 13 2.1.3 Chức ShiftRows 14 2.1.4 Chức MixColumns .15 2.1.5 Chức KeyExpansion 16 2.2 Triển khai Python .18 2.2.1 Hàm băm tạo khoá 18 2.2.2 Hàm mã hoá giải mã hoá .18 2.2.3 Kiểm tra thử tin 19 Hình Sơ đồ khối hệ thống mã hoá QPSK .5 Hình Tín hiệu QPSK biểu đồ vector Hình Kết mơ q trình tạo sóng mang Hình 448 bit đầu vào Hình Tín hiệu QPSK đầu miền thời gian Hình Tín hiệu sau thêm nhiễu Hình Sơ đồ khối mạch giải điều chế QPSK Hình Kênh I trước tích phân Hình Mô hình mã hoá giải mã AES .12 Hình 10 Ví dụ liệu mã khoá dạng ma trận 12 Hình 11 Add Roundkey 13 Hình 12 S-Box AES 13 Hình 13 Ví dụ Sub - bytes 14 Hình 14 Shift Row 14 Hình 15 Ma trận chuyển đổi sử dụng chức MixColumns 15 Hình 16 Chức MixColumns 15 Hình 17 Chức KeyExpansion 16 Hình 18 Thực thi RotWord .16 Hình 19 Thực thi SubWord 17 Hình 20 Giá trị Rcon vòng 17 Hình 21 AddRcon 17 Hình 22 Thực thi AddW 18 ĐIỀU CHẾ VÀ GIẢI ĐIỀU CHẾ QPSK 1.1 Điều chế số Là trình ba thơng số biên độ, tần số pha sóng mang thay đổi theo tín hiệu (hay luồng số) đưa vào điều chế để thơng tin sóng mang phù hợp với đường truyền 1.2 Các phương pháp điều chế số thông dụng Tùy theo thông số sử dụng để mang tin là: biên độ A, tần số f, pha φ hay tổ hợp chúng mà ta có kiểu điều chế khác nhau: ASK, FSK, PSK, QAM… Điều chế khoá dịch biên độ ASK (Amplitude Shift Keying): sóng điều biên tạo cách thay đổi biên độ sóng mang theo biên độ tín hiệu băng gốc Điều chế khố dịch tần số FSK (Frequency Shift Keying): sóng điều tần tạo cách thay đổi tần số sóng mang theo biên độ tín hiệu băng gốc Điều chế khố dịch pha PSK (Phase Shift Keying): sóng điều tần tạo cách thay đổi pha sóng mang theo biên độ tín hiệu băng gốc Điều chế vừa kết hợp biên độ pha hay điều chế cầu phương QAM (Quadrature Amplitude Modulation) 1.3 Điều chế QPSK QPSK viết tắt từ Quadature Phase Shift Keying, tiếng Việt gọi điều chế pha trực giao QPSK kỹ thuật điều chế tín hiệu số, mã hóa bit thành symbols QPSK (Quadrature phase-shift keying) gọi PSK, 4-PSK, 4QAM QPSK dùng trục tọa độ cắt vòng tròn pha (phases) để chuyển đổi bits thành symbol 1.3.1 Điều chế Trong điều chế này, gọi điều chế góc phần tư (QPSK), sóng mang hình sin lấy giá trị pha cách 90 độ xác định tổ hợp bit (Dibit) tín hiệu liệu Hình Sơ đồ khối hệ thống mã hố QPSK Tín hiệu băng gốc đưa vào biến nối tiếp thành song song, đầu hai luồng số liệu có tốc độ bit giảm nửa, đồng thời biến đổi tín hiệu đơn cực thành tín hiệu Hai sóng mang đa tới trộn làm lệch 90 độ Tổng hợp hai tín hiệu đầu trộn tín hiệu QPSK Hình Tín hiệu QPSK biểu đồ vector 1.3.2 Bộ dao động Ta sử dụng python mô dao động tạo sóng sin ngược pha với T s=1, fc = Với mục đích mơ đồ thị song sin miền thời gian nên ta lấy 100 mẫu đơn vị thời gian (thường giây) Kết mô phỏng: Hình Kết mơ q trình tạo sóng mang 1.3.3 Mô điều chế Đầu tiên ta tách chuỗi bit data thành phần gồm odd bits (các bit có thứ tự chẵn) even bits (các bit có thứ tự lẻ) sau đưa vào tạo xung vng NRZ (xung có biên độ -1 đến 1) ta kênh I Q Sau cộng kênh lại ta nhận tín hiệu QPSK điều chế miền thời gian Mô python: Kết mô 448 bit đầu vào ta có 224 symbol sau: Hình 448 bit đầu vào Hình Tín hiệu QPSK đầu miền thời gian 1.3.4 White noise Ta mô nhiễu Gauss có biên độ nhỏ (từ đến 0.1) cộng vào tín hiệu QPSK đầu ra, ta kết đồ thị thể pha tín hiệu khoảng thời gian sau có nhiễu: Hình Tín hiệu sau thêm nhiễu 1.3.5 Giải điều chế Hình Sơ đồ khối mạch giải điều chế QPSK Được thực với mạch tách sóng tích, chúng hình hành tín hiệu QPSK hai tín hiệu sóng mang tách biệt có tần số dùng truyền lệch Đặc trưng chủ yếu QPSK : Áp dụng modem truyền liệu truyền vô tuyến số Yêu mạch có độ phức tạp cao Ít lỗi FSK nhiều 2.PSK Hiệu suất truyền Để giải điều chế QPSK ta cần có dao động giống với điều chế Đầu tiên ta nhân tín hiệu QPSK với tín hiệu hình sin vng pha tạo dao động, ta tách tín hiệu QPSK kênh I Q Kết mơ sau nhân tín hiệu QPSK với tín hiệu từ dao động ta kênh (kênh I) sau: Hình Kênh I trước tích phân Để đưa tín hiệu dạng digital ta lấy tích phân tín hiệu miền thời gian, với tích phân có giá trị lớn bit giải điều chế có giá trị ngược lại bit giải điều chế có giá trị 0, tương tự với kênh Q Sau gộp chuỗi bit giải điều chế (odd bits even bits) ta nhận chuỗi bit ban đầu Mô python: 1.3.6 Kiểm tra Sau nhận chuỗi bit sau giải điều chế, ta tiến hành kiểm tra tỉ lệ bit bị truyền lỗi (bit error ratio), với môi trường mô cho thấy tỉ lệ bit lỗi Kiểm tra python: HỆ MẬT AES AES viết tắt Advanced Encryption Standard, chuẩn mã hóa liệu phổ biến, thuật tốn mã hóa khối thiết kế Rijndael, Nó dùng cho nhiều mục đích phủ Mỹ sử dụng để bảo vệ liệu tuyệt mật 10 AES kiểu mã hóa đối xứng dạng khối, nghĩa khối văn có kích thước định mã hóa (dựa vào độ dài khóa), khác với mã hóa dạng chuỗi kí tự mã hóa Đối xứng nghĩa khóa để mã hóa giải mã AES xây dựng nguyên lý thiết kế lưới giao hoán – thay (substitution-permutation network) Đây hệ mã có tốc độ tốt cài đặt phần mềm phần cứng Khác với DES, AES không theo mẫu thiết kế mạng Feistel Thay vào thao tác thực khối ma trận liệu 4*4 (bytes), gọi trạng thái (state) Số vòng lặp AES tham số xác định sở kích thước khóa: 10 vịng lặp cho khóa 128bit, 12 cho 192 bit, 14 cho 256bit Mã hóa dùng AES gồm nhiều chu trình, khóa sử dụng chu trình tạo trình tạo khóa Rijndael Số vịng lặp (kí hiệu Nr) phụ thuộc vào độ dài khóa : Nr = 10 khóa dài 128 bit Nr = 12 khóa có độ dài 192 bit Nr = 14 độ dài khóa 256 bit 2.1 Mã hóa AES - 128 bit Mã hóa AES thực thơng qua chức AddRoundKey, SubBytes, ShiftRows, MixColumns KeyExpansion Năm chức xếp để thực ba bước Bước Bước khởi tạo: liệu cần mã hóa Plaintext kết hợp với Key chức AddRoundKey Bước Bước lặp mã hóa: kết bước sử dụng để thực chức SubBytes, ShiftRows, MixColumns AddRoundKey Bước lặp lại lần Chú ý, KeyExpansion thực song song với bước AddRoundKey để tạo khóa vịng cho chức Bước Bước tạo ngõ ra: Sau lần lặp bước 2, kết sử dụng để thực chức SubBytes, ShiftRows AddRoundKey để tạo ngõ Ciphertext 11 Hình Mơ hình mã hố giải mã AES Dữ liệu khóa mã xếp dạng ma trận với phần tử byte Trong q trình mã hóa, ma trận liệu ban đầu bị biến đổi chức AddRoundKey, SubBytes, ShiftRows MixColumns để tạo liệu trung gian gọi ma trận trạng thái (State) Ma trận khóa mã bị biến đổi chức KeyExpansion để tạo khóa mã trung gian gọi khóa vịng Hình 10 Ví dụ liệu mã khoá dạng ma trận 2.1.1 Chức AddRoundKey Chức AddRoundKey thực ở: Bước khởi tạo: XOR khóa mã với ma trận liệu Bước lặp mã hóa bước tạo ngõ ra: XOR khóa vòng (round key) với ma trận trạng thái 12 Đây ví dụ AddRoundKey cho bước khởi tạo Đối với bước lặp mã hóa bước tạo ngõ ra, vị trí "khóa mã" "khóa vịng" cịn liệu lần tính trước Hình 11 Add Roundkey 2.1.2 Chức SubBytes Chức SubBytes thực thay byte ma trận trạng thái, ngõ AddRoundKey, giá trị quy định chuẩn AES Bảng quy định giá trị thay gọi S-box Hình 12 S-Box AES Ví dụ, byte cần thay H08 dị hàng số cột số bảng S-box kết 30 13 Hình 13 Ví dụ Sub - bytes 2.1.3 Chức ShiftRows Chức ShiftRows thực quay trái hàng ma trận trạng thái, ngõ SubBytes, theo byte với hệ số quay tăng dần từ đến Hàng có hệ số quay byte giữ ngun vị trí Hàng thứ hai có hệ số quay byte quay byte Hàng thứ ba quay hai byte hàng thứ tư quay ba byte Hình 14 Shift Row 2.1.4 Chức MixColumns Chức MixColumns thực nhân cột ma trận trạng thái, ngõ ShiftRows, với ma trận chuyển đổi quy định chuẩn AES Việc biến đổi 14 cột ma trận trạng thái thực hai phép toán nhân (.) XOR (+) Hình 15 Ma trận chuyển đổi sử dụng chức MixColumns Hình 16 Chức MixColumns 2.1.5 Chức KeyExpansion Chức KeyExpansion thực tính tốn khóa vịng cho bước lặp mã hóa bước tạo ngõ Kết lần thực thi KeyExpansion khóa vịng sử 15 dụng cho chức AddRoundKey Với mã hóa AES-128, số khóa vòng 10 tương ứng với lần AddRoundKey bước lặp mã hóa lần AddRoundKey bước tạo ngõ Chức KeyExpansion thực thông qua chức RotWord, SubWord, AddRcon AddW Hình 17 Chức KeyExpansion Mỗi khóa vịng có 128 bit chia làm word, word byte ký hiệu w[j] với j số nguyên Mã hóa AES-128 có khóa mã 10 khóa vịng nên tổng số từ 44 đánh số từ đến 43 Khóa mã có từ w[0], w[1], w[2] w[3] Khóa vịng có từ w[4], w[5], w[6] w[7] Tương tự, khóa vịng 10 có từ w[40], w[41], w[42] w[43] RotWord: thực quay trái từ w[j] byte Hình 18 Thực thi RotWord SubWord: thực thay phi tuyến byte kết RotWord theo bảng S-box 16 Hình 19 Thực thi SubWord AddRcon: thực XOR kết SubWord giá trị Rcon[j/4] với j bội số Số lượng giá trị Rcon[j/4] 10 tương ứng với 10 lần tính khóa vịng Chức AddRcon tạo kết cuối biến đổi trans(w[j-1]) Hình 20 Giá trị Rcon vòng Hình 21 AddRcon AddWord: Chức AddW thực XOR w[j-4] với w[j-1] để tạo khóa vịng 17 Hình 22 Thực thi AddW 2.2 Triển khai Python 2.2.1 Hàm băm tạo khoá #Key is changed able key = hashlib.sha256(b'16-character key').digest() Khoá tạo hàm băm sha.256 tiêu chuẩn Khoá truyền vào dạng byte 2.2.2 Hàm mã hoá giải mã hoá Dùng phương thức pad unpad để phịng trường hợp liệu mã hố bị lẻ Thuật tốn AES ln tạo mật có số byte chẵn để chuyển thành chuỗi bit chẵn Do QPSK dùng bit làm từ mã nên dòng bit đầu vào phải chẵn def encrypt(raw): BS = AES.block_size pad = lambda s: s + (BS - len(s) % BS) * chr(BS - len(s) % BS) raw = base64.b64encode(pad(raw).encode('utf8')) iv = get_random_bytes(AES.block_size) cipher = AES.new(key= key , mode= AES.MODE_CFB,iv= iv) return base64.b64encode(iv + cipher.encrypt(raw)) Dùng encode base64 hàm pad, ta thu mật chẵn IV – Initial Vector xoay ngẫu nhiên tạo nên hiệu ứng rối hệ mật def decrypt(enc): unpad = lambda s: s[:-ord(s[-1:])] enc = base64.b64decode(enc) iv = enc[:AES.block_size] cipher = AES.new( key , AES.MODE_CFB, iv) 18 return unpad(base64.b64decode(cipher.decrypt(enc[AES.block_size:])).decode('utf 8')) Khi giải mã mật unpad Hai hàm phụ để chuyển kí tự byte thành bit, đầu vào cho trình QPSK def bytetobit(s): return ''.join(format(byte, '08b') for byte in cipertext) def bittobyte(s): return int(s, 2).to_bytes((len(s) + 7) // 8, byteorder='big') 2.2.3 Kiểm tra thử tin 19 ... ẢNH ĐIỀU CHẾ VÀ GIẢI ĐIỀU CHẾ QPSK 1.1 Điều chế số 1.2 Các phương pháp điều chế số thông dụng 1.3 Điều chế QPSK .4 1.3.1 Điều chế 1.3.2 Bộ dao động. .. Thực thi AddW 18 ĐIỀU CHẾ VÀ GIẢI ĐIỀU CHẾ QPSK 1.1 Điều chế số Là trình ba thơng số biên độ, tần số pha sóng mang thay đổi theo tín hiệu (hay luồng số) đưa vào điều chế để thơng tin. .. 2.2.1 Hàm băm tạo khoá 18 2.2.2 Hàm mã hoá giải mã hoá .18 2.2.3 Kiểm tra thử tin 19 Hình Sơ đồ khối hệ thống mã hoá QPSK .5 Hình Tín hiệu QPSK biểu đồ vector