1. Trang chủ
  2. » Tất cả

16-thuattoan-binhphuongnhan-nghichdao-tunghuynh

3 0 0

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

THÔNG TIN TÀI LIỆU

Nội dung

Thuật tốn tính mũ tính nghịch đảo - An tồn bảo mật thơng tin - Thuật tốn Bình phương nhân Thuật tốn bình phương nhân thuật tốn tính nhanh lũy thừa tự nhiên số (thực nguyên), trường hợp số số ngun rút gọn theo mơđun Được sử dụng nhiều tốn mã hóa giải mã hệ mã hóa, đặc biệt hệ mã hóa cơng khai x Tính a mod n Tạo bảng: x Điền giá trị x … a Điền giá trị a … d=1 Khởi tạo d=1 … Với điều kiện chủ chốt: X lẻ tính, X chẵn bỏ qua VD 15 35 mod 79 x a d=1 35 15 15 17 67 57 65 * 38 * X chẵn => ko tính lại d Vẫn tính lại x, a X chẵn => tương tự 22 * X chẵn => tương tự 10 17 X chẵn => tương tự Khởi tạo d=1 X lẻ => tính lại d, x, a IF d := d * (a mod n) = * (15 mod 79) = 15 x := x div = 35 div = 17 a := (a * a) mod n = (15 * 15) mod 79 = 67 X lẻ => tính lại d, x, a tương tự X = => dừng tính, lấy d cuối (d = 17) kết Giả mã mô phỏng: d := 1; while (x 0) begin if (x mod 0) then begin d := d * (a mod n); end; x := x div 2; a := (a * a) mod n; end; exit(d); {giá trị cần tính} Thuật tốn Euclid mở rộng Thuật tốn Euclid mở rộng tìm phần tử nghịch đảo với mơ-đun cho trước Được sử dụng nhiều tốn mã hóa giải mã hệ mã hóa, đặc biệt hệ mã hóa cổ điển Tính n -1 mod m Điều kiện: n m phải số nguyên tố (nghĩa UCLN(n,m)==1) Nếu n==1 kết = (khơng cần tính) Tổng qt: Giá trị điền sẵn: x a b y x1 = m; a1 = 1; b1 = Điền giá trị m Rỗng x2 = n; a2 = 0; b2 = Điền giá trị n y2 i xi bi yi Giá trị tính tốn: xi = xi-2 mod xi-1 = ai-2 – (ai-1 * yi-1) yi = xi-1 div xi bi = bi-2 – (bi-1 * yi-1) Dừng xi = 1, kết quả: bi Nếu xi = => Không tồn phần tử nghịch đảo VD1: 35 x 79 35 VD2: 19 -1 -1 x 26 19 mod 79 a 1 -3 b -2 -9 y Kết quả: -9 mod m = -9 mod 79 = 70  Cách tính chia dư với số âm: cộng liên tục với số chia kết dương while (b < 0) b := b + m; mod 26 a b -1 -4 11 y 2 Kết quả: 11  Thực tế, để tìm đáp số , cần tính cột x, b, y Cột a khơng cần tính Giả mã mơ phỏng: var x, a, b, y: array; var i: integer; x[0] := m; x[1] := n; a[0] := 1; a[1] := 0; b[0] := 0; b[1] := 1; if (a = 1) then exit(1) else if (ucln(n,m) = 1) then exit(null) else begin I := 1; while (x[i] > 1) begin y[i] := x[i-1] div x[i]; i := i + 1; x[i] := x[i-2] div x[i-1]; a[i] := a[i-2] – (a[i-1] * y[i-1]); b[i] := b[i-2] – (b[i-1] * y[i-1]); end; while (b[i-1] < 0) b[i-1] := b[i-1] + m; exit(b[i-1]); end; About me Author: Gmail: Facebook: Demo online: Source code: Tùng Huynh tunghuynh.tn@gmail.com www.facebook.com/tunghuynh.tn http://tunghuynh.com/atbmtt http://tunghuynh.com/atbmtt/soft Moderator at VN-Zoom.com Studied at ICTU - Thái Nguyên

Ngày đăng: 14/04/2022, 16:14

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

  • Đang cập nhật ...