RSA chữ ký và xác minh bằng Openssl

Thảo luận trong 'ACM/Programming' bắt đầu bởi krone, 30/10/18, 09:10 AM.

  1. krone

    krone Moderator Thành viên BQT

    Tham gia: 26/07/16, 03:07 PM
    Bài viết: 246
    Đã được thích: 122
    Điểm thành tích:
    43
    upload_2018-10-30_8-49-46.png
    Digital Signature và verification
    • Chữ ký số (Digital Signature) là một lược đồ toán học để biểu diễn tính xác thực của tin nhắn hoặc một tài liệu số.
    • Message hoặc file trong quá trình gửi đi được ký bằng một Private key.
    • Message nhận được bởi người nhận được xác thực bằng Public key.
    Chữ ký RSA và chứng thực bằng OpenSSL
    Tạo ra một file, private key và public key.


    Chữ ký sử dụng OpenSSL
    • Message digest algorithm: SHA1
    • Padding schema: PCKS#1 v1.5
    Xác thực chữ ký bằng OpenSSL
    • OpenSSL giải mã chữ ký để tạo ra hash và so sánh nó với giá trị hash của file đầu vào.
    ...
    Tạo chữ ký RSA
    upload_2018-10-30_9-6-14.png

    Bước 1: Message digest (hash)

    • Message (data) đi qua một hàm cryptographi-hash để tạo ra một mã hash của mesage đó.
    • SHA1 tạo ra 160 bit (20 byte) hash.
    • SHA224, SHA256, SHA384, SHA512, MD4, MD5 là một vài thuật toán có sẵn trong OpenSSL.
    Bước 2: Padding the hash value
    • Hash value (20 byte trong trường hợp của SHA1) được mở rộng đến kích thước của RSA bằng prefixing padding.
    • Padding schema mặc định trong openssl là PKCS1.
    • PKCS#1 v1.5 padding schema: 00||01||PS||00||T||H
    • PS: Octet có FF với độ dài message bằng với kích thước key.
    • T: Định danh lược đồ chữ ký (Mỗi lược đồ có các byte MAGIC).
    • H: hash value của message.
    PKCS#1v1.5 padding scheme for SHA1:
    upload_2018-10-30_9-16-13.png
    Bước 3: Lấy modulus và private exponent từ private key
    Xem nội dung của Private key
    Định dạng output để in ra "modulus" và "private exponent"
    Bước 4: Ký padding schema với private exponent và modulus

    upload_2018-10-30_9-21-58.png

    Xác thực chữ ký RSA

    upload_2018-10-30_9-24-7.png
    Bước 1: Lấy "modulus" và "public exponent" từ public key
    Xem nội dung của Public key
    • Public key chứa "modulus", "public exponent" và key size.
    • 65537 (0x10001) được chấp nhận là public exponent mặc định.
    Định dạng output để in ra "modulus" và "public exponent"
    Bước 2: Định dạng và in ra signature file
    • Signature là một file binary được chuyển đổi thành một số nguyên lớn và được sử dụng trong quá trình xác thực
    Bước 3: Convert sign về padding hash.
    upload_2018-10-30_9-31-28.png
    Padded hash được nhúng vào trong lúc xác minh khớp với padded hash khi ký.
    Bước 4: Xoá padding để lấy hash của message
    Hash thu được ở trên là hash SHA1 của file dữ liệu
     
    Chỉnh sửa cuối: 30/10/18, 09:10 AM
    Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan