การ เข้ารหัสแผ่นครั้งเดียวด้วย QR และ JAVASCRIPT พื้นฐาน

เข้ารหัสแผ่นครั้งเดียวด้วย QR การเข้ารหัสแพดแบบครั้งเดียวให้ความปลอดภัยที่ไม่แตกหัก* หากคุณสามารถรับประกันการสร้างตัวเลขสุ่มอย่างแท้จริง และความปลอดภัยของแพดที่สร้างขึ้น การใช้งานจากมุมมองของคนธรรมดาที่เข้ารหัสเป็นวิธีที่สนุกในการเรียนรู้เพิ่มเติมเกี่ยวกับมัน และสามารถเพิ่มชั้นความปลอดภัยพิเศษให้กับการสื่อสารที่ละเอียดอ่อนที่สุดของคุณ

รูปแบบของแพดแบบใช้ครั้งเดียวที่ใช้โดยสำนักงานความมั่นคงแห่งชาติของสหรัฐอเมริกา ชื่อรหัสว่า DIANA ตารางด้านขวาเป็นตัวช่วยในการแปลงระหว่าง txt ธรรมดาและข้อความเข้ารหัสโดยใช้อักขระด้านซ้ายเป็นคีย์ วงกลมสีดำเป็นสิ่งประดิษฐ์ของการคัดลอก เนื่องจากมีการเจาะรูในต้นฉบับ
(ภาพและข้อความคัดลอกคำต่อคำจาก: https://en.wikipedia.org/wiki/File:NSA_DIANA_one_time_pad.tiff)

ฉันเริ่มต้นด้วยการพยายามเลียนแบบตัวอย่าง NSA ด้านบน ในที่สุดฉันก็ลงเอยด้วยคีย์อักขระ 169 ตัว (แมปเป็นตาราง 13 x 13) ในขณะที่ฉันพยายามเข้ารหัสอักขระเพิ่มเติมในโค้ด QR มันยังใช้งานได้ดีสำหรับข้อความสั้น ๆ และเพื่อพิสูจน์แนวคิด มันมากเกินพอ

รหัส R นั้นสั้นและเรียบง่ายและแสดงไว้ด้านล่าง มันเริ่มต้นด้วยการสร้างตัวเลขสุ่ม 13 x 13 ตั้งแต่ 0 ถึง 25 เพื่อแมปเป็น A ถึง Z นอกจากนี้ยังใช้ไลบรารี qrcode เพื่อสร้างรหัส QR ของคีย์เข้ารหัส จากนั้นจะส่งออกเป็นไฟล์ PDF เพื่อพิมพ์และแจกจ่ายให้กับทั้งผู้ส่งและผู้รับ

#==========================
# Simple one-time-pad generator
# with QR code generation for encryption key
#
# J. van der Linde (jvdl@jvdl.me)
#
# Updated 30 April 2021
#==========================

rm(list = ls())

library(dplyr)
library(qrcode)
library(grid)
library(gridExtra)

#==========================

setwd("~/R/Projects/onetimepad/")

#export pdf to file
pdf("~/R/Projects/onetimepad/otp.pdf")

#initialise with number of rows, cols, and sheets of paper to generate
dim_row <- 13
dim_col <- 13
total_chars <- dim_row * dim_col
total_sheets <- 3

for (i in 1:total_sheets) {
    print(paste("Producing sheet no.", i, "of", total_sheets))
    otp_num <- floor(runif(total_chars, min = 0, max = 26)) #generate from 0 to 25
    otp_char <- replace(otp_num, TRUE, LETTERS[unlist(otp_num + 1)]) #rewrite numbers 0-25 to A-Z
    otp_string <- paste(unlist(otp_char), collapse = '') #create a continuous string for the QR code
    
    otp_num_matrix <- matrix(otp_num, nrow = dim_row, ncol = dim_col, byrow = TRUE) #create a numeric matrix
    otp_char_matrix <- matrix(otp_char, nrow = dim_row, ncol = dim_col, byrow = TRUE) #create a char matrix
    
    otp_char_df <- data.frame(otp_char_matrix) #create dataframe of char matrix
    rownames(otp_char_df) <- seq(dim_row) #set rownames as 1 ... x
    colnames(otp_char_df) <- seq(dim_col) #set colnames as 1 ... y
    
    #output the table of chars to the PDF
    grid.table(otp_char_df)
    grid.text(paste("SHEET", i, "OF", total_sheets), x = unit(0.5, "npc"), y = unit(0.95, "npc"))
    
    #print QR code of OTP to PDF
    qrcode_gen(otp_string)
    
    if (i != total_sheets){
        grid.newpage()
    }
}

#close pdf device
dev.off()

ด้านล่างนี้เป็นข้อความที่ตัดตอนมาจากเอาต์พุต PDF แนวคิดคือควรพิมพ์สำเนาเอกสารนี้สองชุด ชุดหนึ่งสำหรับผู้ส่งและอีกชุดหนึ่งสำหรับผู้รับ ควรส่ง OTP ด้วยตนเองเพื่อให้แน่ใจว่าไม่ถูกดักฟัง ทั้งคู่ควรเก็บ OTP ไว้ในที่ที่ปลอดภัยและทำลายสำเนาอิเล็กทรอนิกส์นี้

PDF ของคีย์เข้ารหัส OTP ที่สร้างขึ้นและรหัส QR ที่เกี่ยวข้อง

เมื่อจำเป็นต้องส่งข้อความที่มีความลับเป็นพิเศษ ตัวละครเอกของเราซึ่งเราจะเรียกพวกเขาว่าอลิซและบ็อบตามประเพณี จะต้องตกลงเกี่ยวกับรหัสที่จะใช้ พวกเขาอาจเตรียมการล่วงหน้าโดยเริ่มที่แผ่นแรกและดำเนินการต่อไปตามลำดับ หรือพวกเขาสามารถตัดสินใจเลือกแผ่นงานได้เอง ตัวอย่างเช่น อลิซสามารถส่งข้อความหาบ๊อบโดยพูดว่า “ใช้ชีต 3 วันนี้” เข้ารหัสแผ่นครั้งเดียวด้วย QR

ในสถานการณ์สมมติของเรา สมมติว่าอลิซต้องพบกับบ็อบ บางทีพวกเขาอาจสรุปธุรกรรมที่เป็นความลับหรือประท้วงเพื่อประชาธิปไตยในประเทศของตน เธอต้องการส่งข้อความว่า “เจอกันตอนสิบเอ็ดโมงที่จัตุรัสกลางเมือง” ประการแรก เธอใช้โปรแกรม ส่งข้อความโต้ตอบแบบทันทีที่ ปลอดภัยอย่าง Signal เพื่อเริ่มการสนทนากับ Bob

อลิซ: สวัสดี FreedomProtestor123 วันนี้ใช้แผ่น3 ข้อความจะตามมาในไม่ช้า

บ๊อบ: สวัสดี DemocracyGirl42 จะทำ

เหตุการณ์ปัจจุบัน…

โดยใช้การบวกแบบโมดูลาร์ (รหัสของเราสำหรับ AZ เท่านั้น ซึ่งมีหมายเลขตั้งแต่ 0 ถึง 25) Alice คำนวณข้อความที่เข้ารหัส เธอเพิ่มตัวอักษรตัวแรกของข้อความต่อตัวอักษรตัวแรกของคีย์ โมดูโล 26 เธอทำซ้ำสำหรับตัวอักษรตัวที่ 2 ของข้อความและตัวอักษรตัวที่สองของคีย์ ไปเรื่อยๆ จากนั้นเธอก็จับคู่ตัวเลขผลลัพธ์ของการบวกแบบโมดูลาร์กลับไปเป็นตัวอักษร

นอกจากนี้ยังสามารถทำได้ค่อนข้างง่ายด้วยความช่วยเหลือของคอมพิวเตอร์ อลิซสามารถใช้โทรศัพท์ของเธอสแกนคิวอาร์โค้ดที่อยู่ติดกับตารางแบบเก่าและทำขั้นตอนให้เสร็จสิ้นผ่านแอปหรือหน้าเว็บ อลิซต้องทำให้แน่ใจว่าเธอสามารถไว้วางใจทุกอย่างในห่วงโซ่นี้ได้ ตั้งแต่เครื่องสแกนรหัส QR ไปจนถึงการไม่ขัดขวางการรับส่งข้อมูลทางอินเทอร์เน็ตของเธอ

ฉันเชื่อมโยงที่นี่กับตัวอย่าง HTML/JS พื้นฐานซึ่งสามารถโฮสต์ออนไลน์หรือเก็บไว้ออฟไลน์เพื่อใช้งานได้ โค้ดนี้จงใจให้เรียบง่ายและสะอาดตา (ไม่มี CSS) เพื่อให้ตรวจสอบแหล่งที่มาได้ง่ายและตัดสินใจได้ว่าจะเชื่อถือหรือไม่ คุณสามารถดูการใช้งานโฮสต์ของฉันได้ที่http://jvdl.me/otp.html ; เนื่องจากเป็นหน้า HTML ที่เรียบง่าย โทรศัพท์หรือคอมพิวเตอร์ทุกเครื่องสามารถแสดงผลได้

การใช้ปุ่มบนแผ่นงาน 3

(DKPKAREZTPABSCHIBLTHZZLNARDGRXVGIBGQDPWLESQWKKAVQDKSPHZNMRDBBNJPTWDANLOARNELLMGODWAMQPYACBABRVTYAPDQHVQESOWQJESMMMDLZULCVGTCYXVZYIJBKOODXCXYSAUCAFGNUUPIBXPHLSXPBBLTQTLUO)

และข้อความของเธอ “เจอกันตอนสิบเอ็ดโมงที่จัตุรัสกลางเมือง” ในที่สุดอลิซก็ลงเอยด้วยข้อความเข้ารหัสต่อไปนี้:

อลิซ: VOT IOL ES XAEWWP HU JY MOD SZJN JTAROZ

บ๊อบ: เข้าใจแล้ว ขอบคุณ

ลึกลับและคลุมเครือ บางทีก็โรแมนติก…

อลิซสามารถเว้นวรรคเพื่อป้องกันไม่ให้อะไรถูกอนุมานจากความยาวของคำ บ๊อบจะยังสามารถเข้าใจข้อความได้ อลิซสามารถใช้ตัวอักษรที่ใช้กันน้อยกว่าปกติ (เช่น Q หรือ X) แทนการเว้นวรรคเพื่อแยกคำในขณะที่ยังคงรักษาข้อความต่อเนื่องกัน สิ่งนี้จะหลีกเลี่ยงการเน้นคำที่เข้ารหัสทีละคำ

อลิซไม่ต้องการคีย์ทั้งหมดเนื่องจากข้อความของเธอสั้น Bob ทำขั้นตอนนี้ซ้ำด้วยการลบและโมดูโลแทนการบวกและโมดูโล เขาลบคีย์ออกจากข้อความที่เข้ารหัสเพื่อรับข้อความต้นฉบับที่ถอดรหัสแล้ว ตอนนี้เขารู้แล้วว่าจะได้พบกับอลิซเมื่อไหร่และที่ไหน

อลิซและบ็อบเป็นคนฉลาดทั้งคู่ พวกเขาคำนึงถึงสิ่งต่อไปนี้ทั้งหมด:

  • อลิซและบ็อบตรวจสอบให้แน่ใจว่าพวกเขาได้รับแผ่นอิเล็กโทรดเพียงชุดเดียว อลิซสร้างมันขึ้นมาและมอบให้บ็อบด้วยตนเอง หรือในทางกลับกัน เข้ารหัสแผ่นครั้งเดียวด้วย QR
  • ข้อความไม่ควรยาวเกินคีย์ (เช่น ไม่ควรวนซ้ำ)
  • พวกเขาจำเป็นต้องปกป้องแผ่นอิเล็กโทรดด้วยชีวิตและจัดเก็บอย่างปลอดภัย โดยเฉพาะอย่างยิ่งหากถูกพบอาจทำให้พวกเขาเสียชีวิตได้
  • พวกเขาจำเป็นต้องเขียนแผ่นงานที่ใช้แล้วหลังจากเกิดการเข้ารหัส/ถอดรหัส
  • พวกเขาส่งข้อความที่เข้ารหัสผ่านแพลตฟอร์มอื่นที่ปลอดภัย เช่น Signal ถ้าเป็นไปได้

ขอบคุณสำหรับการติดตาม! ปลอดภัยในการสื่อสารของคุณ คุณสามารถทำซ้ำงานที่ทำที่นี่ได้อย่างง่ายดายด้วยซอฟต์แวร์ฟรี หากคุณมีข้อความที่เป็นความลับจริงๆ ที่คุณกำลังพยายามจะสื่อ

Face-sso (By K&O) หากท่านสนใจ เครื่องสแกนใบหน้ารุ่นต่างๆ หลากหลายรุ่น หรือ ติดตั้งระบบสแกนใบหน้า สามารถติดต่อสอบถามได้โดยตรง เรามีแอดมินคอยคอบคำถาม 24 ชั้วโมงที่ Line OA เครื่องสแกนใบหน้า สามารถ ขอราคาพิเศษได้ ตามงบประมาณที่เหมาะสม สอบถามได้สบายใจทั้ง เรื่องค่าบริการ ราคา และ งบประมาณ มั่นใจเพราะเป็นราคาที่สุด คุ้มค่าที่สุด

หากท่านมีความสนใจ บทความ หรือ Technology สามารถติดต่อได้ตามเบอร์ที่ให้ไว้ด้านล่างนี้
Tel.086-594-5494
Tel.095-919-6699

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *