More fixes

This commit is contained in:
2026-01-23 20:47:02 +07:00
parent e6ff2cf07a
commit 3b1d18b001
11 changed files with 274 additions and 212 deletions
+2
View File
@@ -4,6 +4,8 @@
#i ผู้จัดทำขอขอบคุณครูที่ปรึกษาและครูที่ปรึกษาร่วม นายภาคิน เหรียญทอง และนายวสันต์ สารคำ ที่ได้ให้คำปรึกษาและคำแนะนำวิธีการในการจัดทำโครงงานให้แก่กลุ่มของข้าพเจ้า ช่วยให้ชิ้นงานสำเร็จลุล่วงตามจุดประสงค์ที่ได้ตั้งไว้อย่างราบรื่น และขอขอบคุณวิทยาลัยเทคนิคหนองคายที่ได้ให้โอกาศแก่กลุ่มของข้าพเจ้าในการประดิษฐ์เครื่องยืนยันตัวตนด้วยระบบ NFC นี้ขึ้นมา
#v(1em)
#align(right, grid(
columns: 2,
column-gutter: 1em,
+7 -7
View File
@@ -55,16 +55,16 @@ Foundation; EFF) ด้วยการสนับสนุนจากนัก
#[
#set enum(indent: 6em)
+ ผู้ใช้เชื่อมั่นว่าอุปกรณ์ของตน โฮสต์เบราว์เซอร์ และวิธีการเข้าถึงเบราว์เซอร์นั้นไม่ถูกบุกรุก (กล่าวคือ
1. ผู้ใช้เชื่อมั่นว่าอุปกรณ์ของตน โฮสต์เบราว์เซอร์ และวิธีการเข้าถึงเบราว์เซอร์นั้นไม่ถูกบุกรุก (กล่าวคือ
ไม่มีการโจมตีซัพพลายเชน)
+ ผู้ใช้เชื่อมั่นว่าซอฟต์แวร์เบราว์เซอร์ใช้งาน HTTPS
2. ผู้ใช้เชื่อมั่นว่าซอฟต์แวร์เบราว์เซอร์ใช้งาน HTTPS
ได้อย่างถูกต้องพร้อมกับผู้ให้บริการออกใบรับรองที่ติดตั้งไว้ล่วงหน้าอย่างถูกต้อง
+ ผู้ใช้เชื่อมั่นว่าผู้ให้บริการออกใบรับรองจะรับรองเฉพาะเว็บไซต์ที่ถูกต้องตามกฎหมายเท่านั้น (กล่าวคือ
3. ผู้ใช้เชื่อมั่นว่าผู้ให้บริการออกใบรับรองจะรับรองเฉพาะเว็บไซต์ที่ถูกต้องตามกฎหมายเท่านั้น (กล่าวคือ
ผู้ให้บริการออกใบรับรองจะไม่ถูกบุกรุกและไม่มีการออกใบรับรองที่ผิดพลาด)
+ เว็บไซต์มีใบรับรองที่ถูกต้อง ซึ่งหมายความว่าได้รับการลงนามโดยผู้ให้บริการที่เชื่อถือได้
+ ใบรับรองระบุเว็บไซต์ได้อย่างถูกต้อง (เช่น เมื่อเบราว์เซอร์เข้าชม https://example.com
4. เว็บไซต์มีใบรับรองที่ถูกต้อง ซึ่งหมายความว่าได้รับการลงนามโดยผู้ให้บริการที่เชื่อถือได้
5. ใบรับรองระบุเว็บไซต์ได้อย่างถูกต้อง (เช่น เมื่อเบราว์เซอร์เข้าชม https://example.com
ใบรับรองที่ได้รับนั้นถูกต้องสำหรับ example.com และไม่ใช่ของหน่วยงานอื่น)
+ ผู้ใช้เชื่อมั่นว่าเลเยอร์การเข้ารหัสของโปรโตคอล (SSL/TLS) มีความปลอดภัยเพียงพอจากการดักฟัง
6. ผู้ใช้เชื่อมั่นว่าเลเยอร์การเข้ารหัสของโปรโตคอล (SSL/TLS) มีความปลอดภัยเพียงพอจากการดักฟัง
]
#iii HTTPS มีความสำคัญอย่างยิ่งต่อเครือข่ายที่ไม่ปลอดภัยและเครือข่ายที่อาจถูกแทรกแซง
@@ -151,7 +151,7 @@ HTTP เริ่มต้นด้วย "http://" และใช้พอร
#iiiii มีผู้ให้บริการออกใบรับรองเชิงพาณิชย์จำนวนหนึ่งที่เสนอใบรับรอง SSL/TLS
แบบชำระเงินหลายประเภท รวมถึงใบรับรองการตรวจสอบขยาย
#iiiii Let's Encrypt เปิดตัวในเดือนเมษายน 2559 ให้บริการใบรับรอง SSL/TLS
#iiiii Let's Encrypt เปิดตัวในเดือนเมษายน 2559 ให้บริการใบรับรอง#jb SSL/TLS
พื้นฐานแบบอัตโนมัติฟรีแก่เว็บไซต์ มูลนิธิ Electronic Frontier Foundation ระบุว่า Let's Encrypt
จะทำให้การเปลี่ยนจาก HTTP เป็น HTTPS "ง่ายดายเพียงแค่ออกคำสั่งหรือคลิกปุ่ม"
ปัจจุบันผู้ให้บริการเว็บโฮสต์และผู้ให้บริการคลาวด์ส่วนใหญ่ใช้ประโยชน์จาก Let's Encrypt
+75 -64
View File
@@ -163,33 +163,34 @@ IBM อ้างสิทธิ์ก่อนหน้านี้ คอมพ
#iii ปี 2008 มีผู้ขายและสถาปัตยกรรมไมโครคอนโทรลเลอร์จำนวนมาก รวมไปถึง:#jb
#block(inset: (left: 5.5em))[
+ หน่วยประมวลผล ARM core โดยเฉพาะคอร์ประเภท ARM Cortex-M
+ Microchip Technology Atmel AVR (8 บิต), AVR32 (32 บิต), และ AT91SAM (32 บิต)
+ คอร์ M8C ของ Cypress Semiconductor's ที่ถูกใช้ใน Cypress PSoC ของพวกเขา
+ Freescale ColdFire (32 บิต) และ S08 (8 บิต)
+ Freescale 68HC11 (8 บิต) และอื่น ที่มีรากฐานมาจากครอบครัว Motorola 6800
+ Intel 8051, ซึ่งนอกจาก Intel ก็ถูกผลิตโดย NXP Semiconductors, Infineon, และอื่น
#[
#set enum(indent: 5.5em)
1. หน่วยประมวลผล ARM core โดยเฉพาะคอร์ประเภท ARM Cortex-M
2. Microchip Technology Atmel AVR (8 บิต), AVR32 (32 บิต), และ AT91SAM (32 บิต)
3. คอร์ M8C ของ Cypress Semiconductor's ที่ถูกใช้ใน Cypress PSoC ของพวกเขา
4. Freescale ColdFire (32 บิต) และ S08 (8 บิต)
5. Freescale 68HC11 (8 บิต) และอื่น ที่มีรากฐานมาจากครอบครัว Motorola 6800
6. Intel 8051, ซึ่งนอกจาก Intel ก็ถูกผลิตโดย NXP Semiconductors, Infineon, และอื่น
หลายรายการ
+ Infineon: 8 บิต XC800, 16 บิต XE166, 32 บิต XMC4000 (ARM based Cortex M4F), 32
7. Infineon: 8 บิต XC800, 16 บิต XE166, 32 บิต XMC4000 (ARM based Cortex M4F), 32
บิต TriCore, และ 32 บิต Aurix Tricore Bit microcontrollers
+ Maxim Integrated MAX32600, MAX32620, MAX32625, MAX32630, MAX32650, MAX32640
+ MIPS
+ Microchip Technology PIC, (8 บิต PIC16, PIC18, 16 บิต dsPIC33 / PIC24), (32 บิต
PIC32)
+ NXP Semiconductors LPC1000, LPC2000, LPC3000, LPC4000 (32 บิต), LPC900,
8. Maxim Integrated MAX32600, MAX32620, MAX32625, MAX32630, MAX32650, MAX32640
9. MIPS
10. Microchip Technology PIC, (8 บิต PIC16, PIC18, 16 บิต dsPIC33 / PIC24), (32
บิต PIC32)
11. NXP Semiconductors LPC1000, LPC2000, LPC3000, LPC4000 (32 บิต), LPC900,
LPC700 (8 บิต)
+ Parallax Propeller
+ PowerPC ISE
+ Rabbit 2000 (8 บิต)
+ Renesas Electronics: RL78 16 บิต MCU; RX 32 บิต MCU; SuperH; V850 32 บิต MCU;
12. Parallax Propeller
13. PowerPC ISE
14. Rabbit 2000 (8 บิต)
15. Renesas Electronics: RL78 16 บิต MCU; RX 32 บิต MCU; SuperH; V850 32 บิต MCU;
H8; R8C 16 บิต MCU
+ Silicon Laboratories ไมโครคอนโทรลเลอร์ Pipelined 8 บิต 8051
16. Silicon Laboratories ไมโครคอนโทรลเลอร์ Pipelined 8 บิต 8051
และไมโครคอนโทรลเลอร์แบบ ARM-based 32 บิต สัญญาณผสม
+ STMicroelectronics STM8 (8 บิต), ST10 (16 บิต), STM32 (32 บิต), SPC5
17. STMicroelectronics STM8 (8 บิต), ST10 (16 บิต), STM32 (32 บิต), SPC5
(automotive 32 บิต)
+ Texas Instruments TI MSP430 (16 บิต), MSP432 (32 บิต), C2000 (32 บิต)
+ Toshiba TLCS-870 (8 บิต/16 บิต)
18. Texas Instruments TI MSP430 (16 บิต), MSP432 (32 บิต), C2000 (32 บิต)
19. Toshiba TLCS-870 (8 บิต/16 บิต)
]
#iiii และยังมีอีกมากมาย โดยบางอย่างนั้นถูกใช้ในแอปพลิเคชันที่เจาะจงมาก
@@ -206,22 +207,21 @@ dual-core หรือไมโครโปรเซสเซอร์ RISC-V
ยังรวมส่วนประกอบที่จำเป็นสำหรับการสื่อสารข้อมูลไร้สาย เช่น สวิตช์เสาอากาศในตัว บาลัน RF
เครื่องขยายกำลัง เครื่องรับสัญญาณรบกวนต่ำ ตัวกรอง และโมดูลการจัดการพลังงาน
#[
// #set par(spacing: 0.75em)
#afigure(
image("Microcontroller/ESP32-C3_RISC-V_NodeMCU_board.jpg", width: 2in),
alt: "บอร์ดสีดำ มีพิน GPIO ด้านข้างและมีชิพอยู่บริเวณด้านบนบอร์ด",
attr: [Popolon, CC BY-SA 4.0,
https://commons.wikimedia.org/w/index.php?curid=112634884],
caption: [บอร์ด NodeMCU ที่มี ESP32-C3-32S],
)
#afigure(
image("Microcontroller/ESP32-C3_RISC-V_NodeMCU_board.jpg", width: 2in),
alt: "บอร์ดสีดำ มีพิน GPIO ด้านข้างและมีชิพอยู่บริเวณด้านบนบอร์ด",
attr: [Popolon, CC BY-SA 4.0,
https://commons.wikimedia.org/w/index.php?curid=112634884],
caption: [บอร์ด NodeMCU ที่มี ESP32-C3-32S],
)
#iii โดยทั่วไปแล้ว ESP32
จะถูกฝังอยู่บนแผงวงจรพิมพ์เฉพาะอุปกรณ์หรือนำเสนอเป็นส่วนหนึ่งของชุดการพัฒนาที่มีพินและตัวเชื่อมต่อ
GPIO ที่หลากหลาย โดยมีการกำหนดค่าที่แตกต่างกันไปตามรุ่นและผู้ผลิต ESP32 ได้รับการออกแบบโดย
Espressif Systems และผลิตโดย TSMC โดยใช้กระบวนการ 40 นาโนเมตร
มันเป็นผู้สืบทอดของไมโครคอนโทรลเลอร์ ESP8266
]
#v(0.5em)
#iii โดยทั่วไปแล้ว ESP32
จะถูกฝังอยู่บนแผงวงจรพิมพ์เฉพาะอุปกรณ์หรือนำเสนอเป็นส่วนหนึ่งของชุดการพัฒนาที่มีพินและตัวเชื่อมต่อ GPIO
ที่หลากหลาย โดยมีการกำหนดค่าที่แตกต่างกันไปตามรุ่นและผู้ผลิต ESP32 ได้รับการออกแบบโดย Espressif
Systems และผลิตโดย TSMC โดยใช้กระบวนการ 40 นาโนเมตร มันเป็นผู้สืบทอดของไมโครคอนโทรลเลอร์
ESP8266
=== Espressif Systems
@@ -259,14 +259,15 @@ things (IoT)
=== Name
#iiii Name คือ ชื่อของพาร์ทิชัน ห้ามซ้ำกัน ชื่อนั้นไม่สำคัญต่อระบบและต้องขนาดไม่เกิน 16 ตัวอักษร (ไม่มีอักขระพิเศษ)
#iiii Name คือ ชื่อของพาร์ทิชัน ห้ามซ้ำกัน ชื่อนั้นไม่สำคัญต่อระบบและต้องขนาดไม่เกิน 16 ตัวอักษร
(ไม่มีอักขระพิเศษ)
=== Type
#iiii Type คือ ประเภทของพาร์ทิชัน สามารถเป็น data หรือ app ได้
#[
#set enum(indent: 6em)
#set enum(indent: 9.25em)
+ app คือพาร์ทิชันที่ใช้ในการเก็บแอปพลิเคชัน
+ data คือพาร์ทิชันที่ใช้ในการเก็บข้อมูลทั่วไป
]
@@ -275,46 +276,55 @@ things (IoT)
#iiii SubType คือ ประเภทย่อย ระบุการใช้งานของพาร์ทิชัน data และ app
#block(inset: (left: 6em))[
+ data
+ ota คือ พาร์ทัชันเก็บข้อมูล OTA (สำหรับการอัพเดททางอากาศ, Over-the-air update)
โดยหากไม่ใช้งาน OTA สามารถนำออกได้ โดยขนาดของพาร์ทิชันนี้ควรจะมีขนาดที่แน่นอนอยู่ที่ 8
KiB (0x2000 ไบต์)
+ nvs คือ พาร์ทิชันเก็บข้อมูลทั่วไปเช่น ข้อมูล Wi-Fi, ข้อมูลการสอบเทียบ PHY ของอุปกรณ์,
#[
#set enum(indent: 9.25em)
1. data
#listy(
indent: 10.75em,
numbering: thai-numbering,
[ota คือ พาร์ทัชันเก็บข้อมูล OTA (สำหรับการอัพเดททางอากาศ, Over-the-air update)
โดยหากไม่ใช้งาน OTA สามารถนำออกได้ โดยขนาดของพาร์ทิชันนี้ควรจะมีขนาดที่แน่นอนอยู่ที่ 8 KiB
(0x2000 ไบต์)],
[nvs คือ พาร์ทิชันเก็บข้อมูลทั่วไปเช่น ข้อมูล Wi-Fi, ข้อมูลการสอบเทียบ PHY ของอุปกรณ์,
และข้อมูลอื่น ที่ต้องถูกเก็บบนหน่วยความจำถาวร (Non-volatile memory)
โดยพาร์ทิชันประเภทนี้เหมาะสมสำหรับการเก็บข้อมูลการตั้งค่าเล็กน้อย ใบรองรับคลาวด์ ฯลฯ
และการใช้งาน NVS อีกอย่างคือการเก็บข้อมูลที่ละเอียดอ่อน เนื่องจาก NVS รองรับการเข้ารหัส
และเป็นสิ่งที่แนะนำอย่างมากที่จะมีพาร์ทิชัน NVS ขนาดขั้นต่ำ 12 KiB (0x3000 ไบต์)
และหากจำเป็น คุณสามารถขยายขนาดเพิ่มได้ โดยขนาดที่แนะนำนั้นอยู่ระหว่าง 12 KiB และ 64
KiB ถึงแม้ว่าคุณจะสามารถขยายให้มันใหญ่กว่านี้ได้ การใช้งานระบบไฟล์เช่น FAT หรือ SPIFFS
นั้นจะเหมาะสมสำหรับข้อมูลที่ใหญ่กว่า
+ coredump คือ ประเภทพาร์ทิชันย่อยนี้มีหน้าที่ในการเก็บข้อมูล core dump บนหน่วยความจำแฟลช
นั้นจะเหมาะสมสำหรับข้อมูลที่ใหญ่กว่า],
[coredump คือ ประเภทพาร์ทิชันย่อยนี้มีหน้าที่ในการเก็บข้อมูล core dump บนหน่วยความจำแฟลช
โดย core dump
นั้นคือข้อมูลที่ถูกใช้งานสำหรับการตรวจสอบข้อผิด-พลาดร้ายแรงเช่นการแครชและแพนิค
โดยฟังก์ชันนี้จะต้องถูกเปิดในการตั้งค่าโปรเจกต์และตั้งที่หมายในการแฟลช
และพาร์ทิชันนี้มีขนาดที่แนะนำอยู่ที่ 64 KiB (0x10000)
+ nvs_keys คือ พาร์ทิชันที่เป็นประเภทย่อยนี้เก็บคีย์การเข้ารหัสของพาร์ทัชัน NVS
เมื่อการเข้ารหัสถูกใช้งาน โดยมีขนาดอยู่ที่ 4 KiB (0x1000)
+ fat คือ กำหนดพาร์ทิชันสำหรับระบบไฟล์ FAT โดยที่จะเหมาะสมสำหรับข้อมูลใหญ่ ๆ
และพาร์ทิชันนี้มีขนาดที่แนะนำอยู่ที่ 64 KiB (0x10000)],
[nvs_keys คือ พาร์ทิชันที่เป็นประเภทย่อยนี้เก็บคีย์การเข้ารหัสของพาร์ทัชัน NVS
เมื่อการเข้ารหัสถูกใช้งาน โดยมีขนาดอยู่ที่ 4 KiB (0x1000)],
[fat คือ กำหนดพาร์ทิชันสำหรับระบบไฟล์ FAT โดยที่จะเหมาะสมสำหรับข้อมูลใหญ่ ๆ
และหากข้อมูลนั้นถูกเปลี่ยนแปลงบ่อย โดยระบบไฟล์ FAT สามารถใช้ฟีเจอร์ wear leveling
และการเข้ารหัสได้
+ spiffs คือ กำหนดพาร์ทิชันสำหรับระบบไฟล์ SPIFFS เหมาะสำหรับไฟล์ใหญ่เช่นกันและรองรับ
wear leveling อย่างไรก็ตาม ระบบไฟล์นี้ไม่รองรับการเข้ารหัส
+ app
+ factory คือ พาร์ทิชันเก็บแอปพลิเคชันเริ่มต้น
โปรแกรมบูตโหลดเดอร์จะเลือกพาร์ทิชันนี้เป็นแอปพลิเคชันเริ่มต้นหากไม่มีพาร์ทิชัน OTA
หรือพาร์ทิชัน OTA นั้นว่างเปล่า หากมีการใช้พาร์ทิชัน OTA พาร์ทิชัน ota_0
สามารถถูกใช้เป็นแอปพลิเคชันเริ่มต้นได้และพาร์ทิชัน factory สามารถถูกนำออกได้
+ ota_0 ถึง ota_15 คือ พาร์ทิชัน ota_x นั้นถูกใช้สำหรับอัพเดท OTA โดยฟีเจอร์ OTA
และการเข้ารหัสได้],
[spiffs คือ กำหนดพาร์ทิชันสำหรับระบบไฟล์ SPIFFS เหมาะสำหรับไฟล์ใหญ่เช่นกันและรองรับ wear
leveling อย่างไรก็ตาม ระบบไฟล์นี้ไม่รองรับการเข้ารหัส],
)
2. app
#listy(
indent: 10.75em,
numbering: thai-numbering,
[factory คือ พาร์ทิชันเก็บแอปพลิเคชันเริ่มต้น
โปรแกรมบูตโหลดเดอร์จะเลือกพาร์ทิชันนี้เป็นแอปพลิเคชันเริ่มต้นหากไม่มีพาร์ทิชัน OTA หรือพาร์ทิชัน
OTA นั้นว่างเปล่า หากมีการใช้พาร์ทิชัน OTA พาร์ทิชัน ota_0
สามารถถูกใช้เป็นแอปพลิเคชันเริ่มต้นได้และพาร์ทิชัน factory สามารถถูกนำออกได้],
[ota_0 ถึง ota_15 คือ พาร์ทิชัน ota_x นั้นถูกใช้สำหรับอัพเดท OTA โดยฟีเจอร์ OTA
นั้นจำเป็นต้องใช้พาร์ทิชัน OTA อย่างน้อย 2 พาร์ทิชัน (โดยปกติคือ ota_0 และ ota_1)
และจำเป็นต้องใช้พาร์ทิชัน ota ด้วยเช่นกันในการเก็บข้อมูลเกี่ยวกับ OTA โดยสามารถมีพาร์ทิชัน
OTA ได้สูงสุด 16 พาร์ทิชัน แต่ 2 พาร์ทิชันคือจำนวนขั้นต่ำที่ต้องใช้สำหรับฟีเจอร์ OTA แบบเบสิค
+ test คือ ใช้สำหรับการทดสอบในโรงงาน
OTA ได้สูงสุด 16 พาร์ทิชัน แต่ 2 พาร์ทิชันคือจำนวนขั้นต่ำที่ต้องใช้สำหรับฟีเจอร์ OTA แบบเบสิค],
[test คือ ใช้สำหรับการทดสอบในโรงงาน],
)
]
=== Offset
Offset คือ กำหนดพื้นที่ที่พาร์ทิชันนั้น เริ่มต้น โดย Offset นั้นถูกกำหนดโดยการรวมค่า Offset
#iiii Offset คือ กำหนดพื้นที่ที่พาร์ทิชันนั้น เริ่มต้น โดย Offset นั้นถูกกำหนดโดยการรวมค่า Offset
และขนาดของพาร์ทิชันก่อนหน้า 0 อย่างไรก็ตาม Offset จะต้องเป็นทวีคูณของ 4 KiB (0x1000)
และพาร์ทิชันแอพจะต้องจัดตำแหน่งให้มีขนาด 64 KiB (0x10000) โดยหากปล่อยให้ว่าง ค่า Offset
จะถูกคำนวนโดยอัตโนมัติตามตำแหน่งท้ายของพาร์ทิชันก่อนหน้า รวมถึงการจัดตำแหน่งใด ที่จำเป็น
@@ -323,11 +333,12 @@ Offset คือ กำหนดพื้นที่ที่พาร์ทิ
=== Size
Size คือ ขนาดของพาร์ทิชัน โดยค่านี้สามารถเป็นเลขทศนิยม, ตัวเลข Hex (นำหน้าด้วย 0x), หรือใช้ตัวอักษรต่อท้ายเพื่อบ่งบอกหน่วย K (กิโล) หรือ M (เมกา) เช่น 4096 = 4K = 0x1000
#iiii Size คือ ขนาดของพาร์ทิชัน โดยค่านี้สามารถเป็นเลขทศนิยม, ตัวเลข Hex (นำหน้าด้วย 0x),
หรือใช้ตัวอักษรต่อท้ายเพื่อบ่งบอกหน่วย K (กิโล) หรือ M (เมกา) เช่น 4096 = 4K = 0x1000
=== Flags
Flags คือ ในปัจจุบันคอลัมน์นี้ใช้เพียงแค่เพื่อบ่งบอกว่าพาร์ทิชันนั้น ถูกเข้ารหัสหรือไม่
#iiii Flags คือ ในปัจจุบันคอลัมน์นี้ใช้เพียงแค่เพื่อบ่งบอกว่าพาร์ทิชันนั้น ถูกเข้ารหัสหรือไม่
== littlefs
+15 -9
View File
@@ -76,12 +76,15 @@ Field) สนามแม่เหล็กไฟฟ้าสลับเป็
การสื่อสารเกิดขึ้นระหว่างอุปกรณ์ "ตัวเริ่มต้น" ที่ใช้งานอยู่และอุปกรณ์เป้าหมาย ซึ่งอาจเป็น
+ พาสซีฟ โดยอุปกรณ์ตัวเริ่มต้นจะทำหน้าที่เป็นสนามแม่เหล็กพาหะ
#[
#set enum(indent: 5.5em)
1. พาสซีฟ โดยอุปกรณ์ตัวเริ่มต้นจะทำหน้าที่เป็นสนามแม่เหล็กพาหะ
และอุปกรณ์เป้าหมายจะสื่อสารโดยการปรับสนามแม่เหล็กตกกระทบ ในโหมดนี้
อุปกรณ์เป้าหมายอาจดึงพลังงานจากสนามแม่เหล็กที่ตัวเริ่มต้นจัดหาให้
+ คล่องแคล่ว โดยทั้งอุปกรณ์เริ่มต้นและอุปกรณ์เป้าหมายสื่อสารกันโดยการสร้างฟิลด์ของตัวเองสลับกัน
อุปกรณ์จะหยุดส่งสัญญาณเพื่อรับข้อมูลจากอีกอุปกรณ์หนึ่ง โหมดนี้กำหนดให้อุปกรณ์ทั้งสองต้องมีแหล่งจ่ายไฟ
2. คล่องแคล่ว โดยทั้งอุปกรณ์เริ่มต้นและอุปกรณ์เป้าหมายสื่อสารกันโดยการสร้างฟิลด์ของตัวเองสลับกัน
อุปกรณ์จะหยุดส่งสัญญาณเพื่อรับข้อมูลจากอีกอุปกรณ์หนึ่ง โหมดนี้กำหนดให้อุปกรณ์ทั้งสองต้องมีแหล่งจ่ายไฟ
]
#figure(
table(
@@ -101,12 +104,15 @@ Field) สนามแม่เหล็กไฟฟ้าสลับเป็
#iii อุปกรณ์ NFC ที่ใช้งานอยู่ทุกเครื่องสามารถทำงานในโหมดใดโหมดหนึ่งหรือหลายโหมดได้
+ การจำลองการ์ด NFC ช่วยให้อุปกรณ์ที่รองรับ NFC เช่น สมาร์ทโฟน ทำหน้าที่เหมือนสมาร์ทการ์ด
ช่วยให้ผู้ใช้ทำธุรกรรมต่างๆ เช่น การชำระเงินหรือการออกตั๋วได้ ดูการจำลองการ์ดโฮสต์
+ เครื่องอ่าน/เขียน NFC ช่วยให้อุปกรณ์ที่เปิดใช้งาน NFC สามารถอ่านข้อมูลที่จัดเก็บไว้ในแท็ก NFC
ราคาไม่แพงที่ฝังอยู่ในฉลากหรือโปสเตอร์อัจฉริยะได้
+ NFC เพียร์ทูเพียร์ ช่วยให้อุปกรณ์ที่เปิดใช้งาน NFC
สองเครื่องสามารถสื่อสารกันเพื่อแลกเปลี่ยนข้อมูลในลักษณะ เฉพาะกิจ
#[
#set enum(indent: 5.5em)
+ การจำลองการ์ด NFC ช่วยให้อุปกรณ์ที่รองรับ NFC เช่น สมาร์ทโฟน ทำหน้าที่เหมือนสมาร์ทการ์ด
ช่วยให้ผู้ใช้ทำธุรกรรมต่างๆ เช่น การชำระเงินหรือการออกตั๋วได้ ดูการจำลองการ์ดโฮสต์
+ เครื่องอ่าน/เขียน NFC ช่วยให้อุปกรณ์ที่เปิดใช้งาน NFC สามารถอ่านข้อมูลที่จัดเก็บไว้ในแท็ก NFC
ราคาไม่แพงที่ฝังอยู่ในฉลากหรือโปสเตอร์อัจฉริยะได้
+ NFC เพียร์ทูเพียร์ ช่วยให้อุปกรณ์ที่เปิดใช้งาน NFC
สองเครื่องสามารถสื่อสารกันเพื่อแลกเปลี่ยนข้อมูลในลักษณะ เฉพาะกิจ
]
แท็ก NFC คือหน่วยเก็บข้อมูลแบบพาสซีฟที่อุปกรณ์ NFC สามารถอ่านและเขียนข้อมูลได้ในบางกรณี#jb
โดยทั่วไปจะมีข้อมูล (ณ ปี 2015 มีขนาดระหว่าง 96 ถึง 8,192 ไบต์)
+3 -6
View File
@@ -38,13 +38,10 @@ IR แบบสร้างภาพ เซ็นเซอร์ PIR มัก
โดยปกติแล้วรังสีนี้มองไม่เห็นด้วยตาเปล่าเนื่องจากแผ่รังสีในช่วงความยาวคลื่นอินฟราเรด
แต่อุปกรณ์อิเล็กทรอนิกส์ที่ออกแบบมาเพื่อจุดประสงค์นี้ สามารถตรวจจับได้
#v(1em)
== เครื่องตรวจจับการเคลื่อนไหวแบบ PIR
\
#afigure(
image("PIR/Motion_detector.jpg", height: image-height),
image("PIR/Motion_detector.jpg", height: 2in),
alt: "เครื่องตรวจจับความเคลื่อนไหว ติดตั้งบนเพดาน",
attr: [CHG, Public Domain,
https://commons.wikimedia.org/w/index.php?curid=6087132],
@@ -187,7 +184,7 @@ IR แบบสร้างภาพ เซ็นเซอร์ PIR มัก
#iiii บางรุ่นผลิตขึ้นโดยใช้กระจกพาราโบลา แบบแบ่งส่วนภายใน เพื่อรวมพลังงานอินฟราเรด
ในกรณีที่ใช้กระจก ฝาครอบกระจกพลาสติกโดยทั่วไปจะไม่มีเลนส์เฟรสเนลหล่อขึ้นรูป
=== PIR ชนิดกระจกแบ่งส่วน
#h(12em) 1) PIR ชนิดกระจกแบ่งส่วน
#afigure(
image("PIR/Front-(mirror_type).jpg", height: 2in),
+19 -19
View File
@@ -43,21 +43,21 @@ Navigator
#block(inset: (left: 6em))[
+ การจับมือเริ่มต้นเมื่อไคลเอนต์เชื่อมต่อกับเซิร์ฟเวอร์ที่เปิดใช้งาน TLS
เพื่อขอการเชื่อมต่อที่ปลอดภัยและไคลเอนต์แสดงรายการชุดรหัสที่รองรับ (รหัสและฟังก์ชันแฮช)
+ จากรายการนี้ เซิร์ฟเวอร์จะเลือกฟังก์ชันรหัสและแฮชที่รองรับ และแจ้งให้ไคลเอนต์ทราบถึงการตัดสินใจ
+ โดยปกติแล้วเซิร์ฟเวอร์จะระบุตัวตนในรูปแบบของใบรับรองดิจิทัลใบรับรองประกอบด้วยชื่อเซิร์ฟเวอร์ผู้ให้บริการออกใบรับรอง
(CA) ที่เชื่อถือได้ซึ่งรับรองความถูกต้องของใบรับรอง และคีย์การเข้ารหัสสาธารณะของเซิร์ฟเวอร์
+ ลูกค้าต้องยืนยันความถูกต้องของใบรับรองก่อนดำเนินการต่อ
+ ในการสร้างคีย์เซสชันที่ใช้สำหรับการเชื่อมต่อที่ปลอดภัย ไคลเอนต์จะต้องทำดังนี้:
+ เข้ารหัสตัวเลขสุ่ม (PreMasterSecret)
ด้วยคีย์สาธารณะของเซิร์ฟเวอร์และส่งผลลัพธ์ไปยังเซิร์ฟเวอร์
(ซึ่งเฉพาะเซิร์ฟเวอร์เท่านั้นที่จะสามารถถอดรหัสด้วยคีย์ส่วนตัว)
จากนั้นทั้งสองฝ่ายใช้ตัวเลขสุ่มเพื่อสร้างคีย์เซสชันเฉพาะสำหรับการเข้ารหัสและถอดรหัสข้อมูลในระหว่างเซสชันในภายหลังหรือ
+ ใช้การแลกเปลี่ยนคีย์ Diffie--Hellman (หรือรูปแบบ DH ที่เป็นเส้นโค้งวงรี)
เพื่อสร้างคีย์เซสชันแบบสุ่มและไม่ซ้ำกันอย่างปลอดภัยสำหรับการเข้ารหัสและถอดรหัส
ซึ่งมีคุณสมบัติเพิ่มเติมของการปกปิดแบบส่งต่อ : หากคีย์ส่วนตัวของเซิร์ฟเวอร์ถูกเปิดเผยในอนาคต
จะไม่สามารถใช้คีย์นั้นเพื่อถอดรหัสเซสชันปัจจุบันได้
แม้ว่าเซสชันนั้นจะถูกดักจับและบันทึกโดยบุคคลที่สามก็ตาม
เพื่อขอการเชื่อมต่อที่ปลอดภัยและไคลเอนต์แสดงรายการชุดรหัสที่รองรับ (รหัสและฟังก์ชันแฮช)
+ จากรายการนี้ เซิร์ฟเวอร์จะเลือกฟังก์ชันรหัสและแฮชที่รองรับ และแจ้งให้ไคลเอนต์ทราบถึงการตัดสินใจ
+ โดยปกติแล้วเซิร์ฟเวอร์จะระบุตัวตนในรูปแบบของใบรับรองดิจิทัลใบรับรองประกอบด้วยชื่อเซิร์ฟเวอร์ผู้ให้บริการออกใบรับรอง
(CA) ที่เชื่อถือได้ซึ่งรับรองความถูกต้องของใบรับรอง และคีย์การเข้ารหัสสาธารณะของเซิร์ฟเวอร์
+ ลูกค้าต้องยืนยันความถูกต้องของใบรับรองก่อนดำเนินการต่อ
+ ในการสร้างคีย์เซสชันที่ใช้สำหรับการเชื่อมต่อที่ปลอดภัย ไคลเอนต์จะต้องทำดังนี้
+ เข้ารหัสตัวเลขสุ่ม (PreMasterSecret)
ด้วยคีย์สาธารณะของเซิร์ฟเวอร์และส่งผลลัพธ์ไปยังเซิร์ฟเวอร์
(ซึ่งเฉพาะเซิร์ฟเวอร์เท่านั้นที่จะสามารถถอดรหัสด้วยคีย์ส่วนตัว)
จากนั้นทั้งสองฝ่ายใช้ตัวเลขสุ่มเพื่อสร้างคีย์เซสชันเฉพาะสำหรับการเข้ารหัสและถอดรหัสข้อมูลในระหว่างเซสชันในภายหลังหรือ
+ ใช้การแลกเปลี่ยนคีย์ Diffie--Hellman (หรือรูปแบบ DH ที่เป็นเส้นโค้งวงรี)
เพื่อสร้างคีย์เซสชันแบบสุ่มและไม่ซ้ำกันอย่างปลอดภัยสำหรับการเข้ารหัสและถอดรหัส
ซึ่งมีคุณสมบัติเพิ่มเติมของการปกปิดแบบส่งต่อ โดยหากคีย์ส่วนตัวของเซิร์ฟเวอร์ถูกเปิดเผยในอนาคต
จะไม่สามารถใช้คีย์นั้นเพื่อถอดรหัสเซสชันปัจจุบันได้
แม้ว่าเซสชันนั้นจะถูกดักจับและบันทึกโดยบุคคลที่สามก็ตาม
]
#iii
@@ -76,7 +76,7 @@ TLS จะล้มเหลวและการเชื่อมต่อจ
#[
#set enum(indent: 6em)
+ การเชื่อมต่อเป็นแบบส่วนตัว (หรือมีความลับ) เนื่องจาก มีการใช้
1. การเชื่อมต่อเป็นแบบส่วนตัว (หรือมีความลับ) เนื่องจาก มีการใช้
อัลกอริทึมคีย์แบบสมมาตรในการเข้ารหัสข้อมูลที่ส่ง
คีย์สำหรับการเข้ารหัสแบบสมมาตรนี้จะถูกสร้างขึ้นอย่างเฉพาะเจาะจงสำหรับแต่ละการเชื่อมต่อ
และอิงจากความลับร่วมที่เจรจากันไว้เมื่อเริ่มต้นเซสชัน
@@ -85,9 +85,9 @@ TLS จะล้มเหลวและการเชื่อมต่อจ
(ความลับที่เจรจากันไว้จะไม่สามารถเข้าถึงได้โดยผู้ดักฟังและไม่สามารถได้รับ
แม้แต่โดยผู้โจมตีที่วางตัวเองอยู่ตรงกลางการเชื่อมต่อ) และเชื่อถือได้
(ไม่มีผู้โจมตีคนใดสามารถแก้ไขการสื่อสารระหว่างการเจรจาโดยไม่ถูกตรวจพบ)
+ การยืนยันตัวตนของฝ่ายที่สื่อสารสามารถยืนยันได้โดยใช้การเข้ารหัสด้วยคีย์สาธารณะการยืนยันตัวตนนี้จำเป็นสำหรับเซิร์ฟเวอร์และเป็นทางเลือกสำหรับไคลเอนต์
+ การเชื่อมต่อมีความน่าเชื่อถือ (หรือมีความสมบูรณ์)
เนื่องจากข้อความแต่ละข้อความที่ส่งออกจะมีการตรวจสอบความสมบูรณ์ของข้อความโดยใช้รหัสยืนยันข้อความเพื่อป้องกันการสูญหายหรือการเปลี่ยนแปลงข้อมูลที่ไม่ถูกตรวจพบระหว่างการส่งข้อมูล
2. การยืนยันตัวตนของฝ่ายที่สื่อสารสามารถยืนยันได้โดยใช้การเข้ารหัสด้วยคีย์สาธารณะการยืนยันตัวตนนี้จำเป็นสำหรับเซิร์ฟเวอร์และเป็นทางเลือกสำหรับไคลเอนต์
3. การเชื่อมต่อมีความน่าเชื่อถือ (หรือมีความสมบูรณ์)
เนื่องจากข้อความแต่ละข้อความที่ส่งออกจะมีการตรวจสอบความสมบูรณ์ของข้อความโดยใช้รหัสยืนยันข้อความเพื่อป้องกันการสูญหายหรือการเปลี่ยนแปลงข้อมูลที่ไม่ถูกตรวจพบระหว่างการส่งข้อมูล
]
#iii TLS รองรับวิธีการที่หลากหลายสำหรับการแลกเปลี่ยนคีย์ การเข้ารหัสข้อมูล
+49 -46
View File
@@ -16,7 +16,7 @@ TLS/SSL ซึ่งเป็นพื้นฐานของ HTTPS โปร
#iii X.509
ยังกำหนดรายการเพิกถอนใบรับรองซึ่งเป็นวิธีการแจกจ่ายข้อมูลเกี่ยวกับใบรับรองที่ถือว่าไม่ถูกต้องโดยผู้มีอำนาจลงนาม
ตลอดจนอัลกอริทึมการตรวจสอบเส้นทางการรับรองซึ่งช่วยให้ใบรับรองได้รับการลงนามโดยใบรับรอง CA
ตัวกลาง ซึ่งใบรับรองเหล่านี้จะได้รับการลงนามโดยใบรับรองอื่นๆ ต่อไปจนไปถึงจุดยึดที่เชื่อถือได้ในที่สุด
ตัวกลาง ซึ่งใบรับรองเหล่านี้จะได้รับการลงนามโดยใบรับรองอื่น ต่อไปจนไปถึงจุดยึดที่เชื่อถือได้ในที่สุด
#iii X.509 ถูกกำหนดโดย "Standardization Sector" ของ ITU (SG17 ของ ITU-T) ใน ITU-T
Study Group 17 และมีพื้นฐานมาจาก Abstract Syntax Notation One (ASN.1)
@@ -28,18 +28,20 @@ Notation One (ASN.1)
#iiii โครงสร้างของใบรับรองดิจิทัล X.509 v3 มีดังนี้
+ ใบรับรอง
+ หมายเลขเวอร์ชัน
+ หมายเลขซีเรียล
+ รหัสอัลกอริทึมลายเซ็น
+ ชื่อผู้ออก
+ ระยะเวลาใช้งานไม่ก่อนหรือไม่หลังจากนั้น
+ ชื่อเรื่อง
+ ข้อมูลคีย์สาธารณะของเรื่องได้แก่อัลกอริทึมคีย์สาธารณะ
คีย์สาธารณะของเรื่องเช่นรหัสประจำตัวผู้ออก (ไม่จำเป็น)
รหัสประจำตัวเฉพาะเรื่อง (ไม่จำเป็น) ส่วนขยาย (ไม่จำเป็น)
+ อัลกอริทึมลายเซ็นใบรับรอง
+ ลายเซ็นใบรับรอง
#block(inset: (left: 9.25em))[
+ ใบรับรอง
+ หมายเลขเวอร์ชัน
+ หมายเลขซีเรียล
+ รหัสอัลกอริทึมลายเซ็น
+ ชื่อผู้ออก
+ ระยะเวลาใช้งาน โดยระบุเวลาไม่ก่อนและไม่หลังจากนั้น
+ ชื่อเรื่อง
+ ข้อมูลคีย์สาธารณะของเรื่อง ได้แก่ อัลกอริทึมคีย์สาธารณะ
คีย์สาธารณะของเรื่องเช่นรหัสประจำตัวผู้ออก (ไม่จำเป็น) รหัสประจำตัวเฉพาะเรื่อง (ไม่จำเป็น)
ส่วนขยาย (ไม่จำเป็น)
+ อัลกอริทึมลายเซ็นใบรับรอง
+ ลายเซ็นใบรับรอง
]
#iiii ฟิลด์ส่วนขยาย (ถ้ามี) จะเป็นลำดับของส่วนขยายใบรับรองอย่างน้อยหนึ่งรายการ
แต่ละส่วนขยายมีรหัสประจำตัวเฉพาะของตัวเอง ซึ่งแสดงเป็นตัวระบุวัตถุ (OID)
@@ -71,39 +73,40 @@ Notation One (ASN.1)
มีหลายประเภทนามสกุลไฟล์เหล่านี้ยังใช้สำหรับข้อมูลอื่น เช่น คีย์ส่วนตัวด้วย
#[
#set enum(indent: 9.75em)
+ `.pem` -- (อีเมลอิเล็กทรอนิกส์ที่เพิ่มความเป็นส่วนตัว) ใบรับรอง DER ที่เข้ารหัส Base64
แนบระหว่าง `-----BEGIN CERTIFICATE-----` และ `-----END CERTIFICATE-----`
+ `.cer`, `.crt`, `.der` -- โดยปกติจะอยู่ในรูปแบบไบนารี DER แต่ใบรับรองที่เข้ารหัส Base64
ก็เป็นเรื่องปกติเช่นกัน (ดู `.pem` ด้านบน)
+ `.p8`, `.p8e`, `.pk8` -- คีย์ส่วนตัวที่ส่งออกตามที่ระบุไว้ใน PKCS\#8 อาจอยู่ในรูปแบบ DER หรือ
PEM ที่ขึ้นต้นด้วย `-----BEGIN PRIVATE KEY-----` คีย์ที่เข้ารหัสจะขึ้นต้นด้วย
`-----BEGIN ENCRYPTED PRIVATE KEY-----` และอาจมี `.p8e` เป็นนามสกุลไฟล์
+ `.p10`, `.csr` -- PKCS\#10 เป็นคำขอลงนามใบรับรอง (CSR) ในรูปแบบ PEM ขึ้นต้นด้วย
`-----BEGIN CERTIFICATE REQUEST-----` แบบฟอร์มเหล่านี้สร้างขึ้นเพื่อส่งไปยังผู้ออกใบรับรอง
(CA) แบบฟอร์มประกอบด้วยรายละเอียดสำคัญของใบรับรองที่ร้องขอ เช่น ชื่อสามัญ (/CN), หัวเรื่อง,
องค์กร, รัฐ, ประเทศ รวมถึงคีย์สาธารณะของใบรับรองที่ต้องการให้ลงนาม
คีย์เหล่านี้จะได้รับการลงนามโดย CA และใบรับรองจะถูกส่งกลับคืน ใบรับรองที่ส่งคืนคือใบรับรอง
สาธารณะ (ซึ่งมีคีย์สาธารณะแต่ไม่มีคีย์ส่วนตัว) ซึ่งตัวใบรับรองเองสามารถอยู่ในรูปแบบต่างๆ
ได้หลายรูปแบบ แต่โดยปกติจะเป็น `.p7r`
+ `.p7r` -- คำตอบ ของ PKCS\#7 ต่อ CSR ประกอบด้วยใบรับรองที่เพิ่งลงนาม และใบรับรองของ CA
เอง
+ `.p7s` -- ลายเซ็นดิจิทัล PKCS\#7 อาจมีไฟล์หรือข้อความที่ลงนามต้นฉบับ ใช้ใน S/MIME
สำหรับการลงนามในอีเมลกำหนดไว้ใน RFC 2311
+ `.p7m` -- PKCS\#7 (SignedData, EnvelopedData) ข้อความ เช่น ไฟล์ที่เข้ารหัส
("enveloped") ข้อความ หรือจดหมายอีเมล MIME กำหนดไว้ใน RFC 2311
+ `.p7c` -- โครงสร้าง SignedData แบบ "certs-only" ของ PKCS\#7 ที่เสื่อมลง
โดยไม่มีข้อมูลใดๆ ให้ลงนาม กำหนดไว้ใน RFC 2311
+ `.p7b` -- โครงสร้าง SignedData ของ PKCS\#7 ที่ไม่มีข้อมูล มีเพียงใบรับรองแบบบันเดิลหรือ CRL
(ไม่ค่อยเกิดขึ้น) แต่ไม่มีคีย์ส่วนตัว ใช้รูปแบบ DER หรือ BER หรือ PEM ที่ขึ้นต้นด้วย
`-----BEGIN PKCS7-----` รูปแบบที่ Windows ใช้สำหรับการแลกเปลี่ยนใบรับรอง รองรับโดย Java
แต่มักใช้นามสกุล `.keystore` แทน ซึ่งแตกต่างจากใบรับรองแบบ `.pem`
รูปแบบนี้มีวิธีที่กำหนดไว้สำหรับการรวมใบรับรองเส้นทางการรับรอง
+ `.p12`, `.pfx`, `.pkcs12` -- PKCS\#12 อาจมีใบรับรอง (สาธารณะ) และคีย์ส่วนตัว
(ป้องกันด้วยรหัสผ่าน) ในไฟล์เดียว `.pfx` - _Personal Information eXchange_ PFX
ซึ่งเป็นรุ่นก่อนของ PKCS\#12 (โดยปกติจะมีข้อมูลในรูปแบบ PKCS\#12 เช่น ไฟล์ PFX ที่สร้างใน IIS)
+ `.crl` -- รายการเพิกถอนใบรับรอง (CRL)
หน่วยงานที่ออกใบรับรองจะจัดทำรายการเหล่านี้ขึ้นเพื่อใช้ในการเพิกถอนใบรับรองก่อนหมดอายุ
#set enum(indent: 9.25em)
1. `.pem` -- (อีเมลอิเล็กทรอนิกส์ที่เพิ่มความเป็นส่วนตัว) ใบรับรอง DER ที่เข้ารหัส Base64
แนบระหว่าง `-----BEGIN CERTIFICATE-----` และ `-----END CERTIFICATE-----`
2. `.cer`, `.crt`, `.der` -- โดยปกติจะอยู่ในรูปแบบไบนารี DER แต่ใบรับรองที่เข้ารหัส
Base64 ก็เป็นเรื่องปกติเช่นกัน (ดู `.pem` ด้านบน)
3. `.p8`, `.p8e`, `.pk8` -- คีย์ส่วนตัวที่ส่งออกตามที่ระบุไว้ใน PKCS\#8 อาจอยู่ในรูปแบบ DER
หรือ PEM ที่ขึ้นต้นด้วย `-----BEGIN PRIVATE KEY-----` คีย์ที่เข้ารหัสจะขึ้นต้นด้วย
`-----BEGIN ENCRYPTED PRIVATE KEY-----` และอาจมี `.p8e` เป็นนามสกุลไฟล์
4. `.p10`, `.csr` -- PKCS\#10 เป็นคำขอลงนามใบรับรอง (CSR) ในรูปแบบ PEM ขึ้นต้นด้วย
`-----BEGIN CERTIFICATE REQUEST-----` แบบฟอร์มเหล่านี้สร้างขึ้นเพื่อส่งไปยังผู้ออกใบรับรอง
(CA) แบบฟอร์มประกอบด้วยรายละเอียดสำคัญของใบรับรองที่ร้องขอ เช่น ชื่อสามัญ (/CN), หัวเรื่อง,
องค์กร, รัฐ, ประเทศ รวมถึงคีย์สาธารณะของใบรับรองที่ต้องการให้ลงนาม
คีย์เหล่านี้จะได้รับการลงนามโดย CA และใบรับรองจะถูกส่งกลับคืน ใบรับรองที่ส่งคืนคือใบรับรอง
สาธารณะ (ซึ่งมีคีย์สาธารณะแต่ไม่มีคีย์ส่วนตัว) ซึ่งตัวใบรับรองเองสามารถอยู่ในรูปแบบต่างๆ
ได้หลายรูปแบบ แต่โดยปกติจะเป็น `.p7r`
5. `.p7r` -- คำตอบ ของ PKCS\#7 ต่อ CSR ประกอบด้วยใบรับรองที่เพิ่งลงนาม และใบรับรองของ
CA เอง
6. `.p7s` -- ลายเซ็นดิจิทัล PKCS\#7 อาจมีไฟล์หรือข้อความที่ลงนามต้นฉบับ ใช้ใน S/MIME
สำหรับการลงนามในอีเมลกำหนดไว้ใน RFC 2311
7. `.p7m` -- PKCS\#7 (SignedData, EnvelopedData) ข้อความ เช่น ไฟล์ที่เข้ารหัส
("enveloped") ข้อความ หรือจดหมายอีเมล MIME กำหนดไว้ใน RFC 2311
8. `.p7c` -- โครงสร้าง SignedData แบบ "certs-only" ของ PKCS\#7 ที่เสื่อมลง
โดยไม่มีข้อมูลใดๆ ให้ลงนาม กำหนดไว้ใน RFC 2311
9. `.p7b` -- โครงสร้าง SignedData ของ PKCS\#7 ที่ไม่มีข้อมูล มีเพียงใบรับรองแบบบันเดิลหรือ
CRL (ไม่ค่อยเกิดขึ้น) แต่ไม่มีคีย์ส่วนตัว ใช้รูปแบบ DER หรือ BER หรือ PEM ที่ขึ้นต้นด้วย
`-----BEGIN PKCS7-----` รูปแบบที่ Windows ใช้สำหรับการแลกเปลี่ยนใบรับรอง รองรับโดย
Java แต่มักใช้นามสกุล `.keystore` แทน ซึ่งแตกต่างจากใบรับรองแบบ `.pem`
รูปแบบนี้มีวิธีที่กำหนดไว้สำหรับการรวมใบรับรองเส้นทางการรับรอง
10. `.p12`, `.pfx`, `.pkcs12` -- PKCS\#12 อาจมีใบรับรอง (สาธารณะ) และคีย์ส่วนตัว
(ป้องกันด้วยรหัสผ่าน) ในไฟล์เดียว `.pfx` - _Personal Information eXchange_ PFX
ซึ่งเป็นรุ่นก่อนของ PKCS\#12 (โดยปกติจะมีข้อมูลในรูปแบบ PKCS\#12 เช่น ไฟล์ PFX ที่สร้างใน
IIS)
11. `.crl` -- รายการเพิกถอนใบรับรอง (CRL)
หน่วยงานที่ออกใบรับรองจะจัดทำรายการเหล่านี้ขึ้นเพื่อใช้ในการเพิกถอนใบรับรองก่อนหมดอายุ
]
#iiii PKCS\#7 เป็นมาตรฐานสำหรับการลงนามหรือเข้ารหัสข้อมูล (เรียกอย่างเป็นทางการว่า
-11
View File
@@ -24,14 +24,3 @@ ASN.1 เช่นเดียวกับ CER การเข้ารหัส
ในการเข้ารหัสลับและช่วยให้มั่นใจว่าโครงสร้างข้อมูลที่จำเป็นต้องมีการลงนามดิจิทัลจะสร้างการแสดงแบบอนุกรมที่ไม่ซ้ำกัน
DER ถือเป็นรูปแบบมาตรฐานของ BER ตัวอย่างเช่นใน BER ค่าบูลีน true
สามารถเข้ารหัสเป็นค่าไบต์ที่ไม่ใช่ศูนย์ 255 ค่า ในขณะที่ DER มีวิธีการเข้ารหัสค่าบูลีน true เพียงวิธีเดียว
#pagebreak()
ข้อจำกัดการเข้ารหัส DER ที่สำคัญที่สุดคือ:
1. การเข้ารหัสความยาวจะต้องใช้รูปแบบที่แน่นอน
- นอกจากนี้ จะต้องใช้การเข้ารหัสที่มีความยาวสั้นที่สุดเท่าที่จะเป็นไปได้
2. บิตสตริง อ็อกเท็ตสตริง และสตริงอักขระที่จำกัดต้องใช้การเข้ารหัสแบบดั้งเดิม
3. องค์ประกอบของชุดจะถูกเข้ารหัสตามลำดับการเรียงลำดับตามค่าแท็ก
DER ถูกใช้กันอย่างแพร่หลายสำหรับใบรับรอง ดิจิทัลเช่น X.509
+24 -39
View File
@@ -47,8 +47,11 @@
=== แผนขั้นตอนและวิธีการดำเนินงาน
ตาราง 3.1 ระยะเวลาการดำเนินงาน
#v(0.5em, weak: true)
#table(
columns: 12,
columns: (2fr, 1fr, 1fr, 1fr, 1fr, 1fr),
align: (
left + horizon,
center,
@@ -56,16 +59,10 @@
center,
center,
center,
center,
center,
center,
center,
center,
center,
),
table.header(
table.cell(
[ขั้นตอนการ\ ดำเนินการ],
[ขั้นตอนการดำเนินการ],
rowspan: 2,
),
table.cell(
@@ -74,48 +71,30 @@
),
table.cell(
[พ.ศ.2569],
colspan: 8,
colspan: 2,
),
[ต.ค.],
[พ.ย.],
[ธ.ค.],
[ม.ค.],
[ก.พ.],
[มี.ค],
[เม.ย],
[พ.ค.],
[มิ.ย.],
[ก.ค.],
[ส.ค.],
),
[ศึกษาค้นคว้าข้อมูล],
table.cell(arrow, colspan: 3),
[],
[],
[],
[],
[],
[],
[],
[],
[เสนอหัวข้อ], arrow, [], [], [], [], [], [], [], [], [], [],
[เสนอครั้งที่ 1], [], arrow, [], [], [], [], [], [], [], [], [],
[ออกแบบและสร้าง], [], table.cell(arrow, colspan: 5), [], [], [], [], [],
[เสนอหัวข้อ], arrow, [], [], [], [],
[เสนอครั้งที่ 1], [], arrow, [], [], [],
[ออกแบบและสร้าง], [], table.cell(arrow, colspan: 3), [],
[จัดซื้ออุปกรณ์ทดลอง],
[],
table.cell(arrow, colspan: 3),
[],
[],
[],
[],
[],
[],
[],
[ทดลองการทำงาน], [], [], table.cell(arrow, colspan: 4), [], [], [], [], [],
[ปรับปรุงแก้ไข], [], [], [], [], table.cell(arrow, colspan: 5), [], [],
[เสนอครั้งที่ 2], [], [], [], arrow, [], [], [], [], [], [], [],
[จัดทำรูปเล่ม], table.cell(arrow, colspan: 11),
[นำเสนอโครงงาน], [], [], [], [], [], [], [], [], [], [], [],
[ทดลองการทำงาน], [], [], table.cell(arrow, colspan: 2), [],
[ปรับปรุงแก้ไข], [], [], [], [], arrow,
[เสนอครั้งที่ 2], [], [], [], arrow, [],
[จัดทำรูปเล่ม], table.cell(arrow, colspan: 5),
[นำเสนอโครงงาน], [], [], [], [], [],
)
#show: page-theme
@@ -146,6 +125,8 @@
== ขั้นตอนการประกอบ
=== การติดตั้งอุปกรณ์
โครงงานแบ่งออกเป็น 3 โมดูล
+ โมดูลเซนเซอร์ NFC ขาเข้าและบอร์ด ESP32
@@ -163,12 +144,16 @@
}
}
=== โมดูลเซนเซอร์ NFC ขาออก
==== โมดูลเซนเซอร์ NFC ขาเข้าและบอร์ด ESP32
#i ดำเนินการเจาะรูบริเวณตัวกล่องเพื่อใช้เป็นช่องสำหรับสายไฟ
จากนั้นนำสายไฟร้อยผ่านช่องดังกล่าวและต่อเข้ากับเซนเซอร์ NFC ให้เรียบร้อยตามขั้นตอน
#iiii ทำการเจาะรู
=== การติดตั้งอุปกรณ์
==== โมดูลเซนเซอร์ NFC ขาออก
#iiii ดำเนินการเจาะรูบริเวณตัวกล่องเพื่อใช้เป็นช่องสำหรับสายไฟ
จากนั้นนำสายไฟร้อยผ่านช่องดังกล่าวและต่อเข้ากับเซนเซอร์ NFC ให้เรียบร้อย
==== โมดูลเซนเซอร์ PIR
=== การเขียนเฟิร์มแวร์ <writingFirmware>
+79 -10
View File
@@ -1,3 +1,12 @@
#let page-numbering(n) = {
let chars = ("ก", "ข", "ค", "ง", "จ", "ฉ", "ช")
if n <= chars.len() {
chars.at(n - 1)
} else {
str(n - chars.len()) // fallback to numbers if exceeds available characters
}
}
#let thai-numbering(n) = {
let chars = ("ก", "ข", "ค", "ง", "จ", "ฉ", "ช")
if n <= chars.len() {
@@ -5,6 +14,7 @@
} else {
str(n - chars.len()) // fallback to numbers if exceeds available characters
}
[)]
}
#let chapter-page(doc) = {
@@ -38,6 +48,26 @@
#let iiiiii = h(16.85em)
#let listy(
numbering: "1)",
indent: 1em,
hanging-indent: 0em,
body-spacing: .3em,
..items,
) = context {
let nums = range(1, items.pos().len() + 1)
let fnums = nums.map(std.numbering.with(numbering))
let numwidth = calc.max(..fnums.map(it => measure(it).width))
for (num, item) in fnums.zip(items.pos()) {
block(inset: (left: hanging-indent), {
h(indent - hanging-indent)
box(width: numwidth + body-spacing, stroke: none, num)
item
})
v(1em, weak: true)
}
}
#let page-theme(doc) = {
set page(
paper: "a4",
@@ -49,7 +79,7 @@
),
header: context [
#h(1fr)
#counter(page).display(thai-numbering)
#counter(page).display(page-numbering)
],
)
set text(
@@ -101,18 +131,57 @@
}
show figure.where(kind: "i-figured-table"): set align(start)
show figure.where(kind: table): set figure.caption(position: top)
show figure.caption: it => {
text(weight: "bold")[
#it.supplement
#it.counter.display(it.numbering)
]
it.body
show figure.where(kind: table): t => {
show figure.caption: it => {
it.supplement
" "
it.counter.display(it.numbering)
" "
it.body
}
it
}
show figure.caption.where(position: bottom): it => place(center, it, dy: 2em)
set figure.caption(separator: "")
// show figure.where(kind: image): set figure(gap: 2em)
show figure.where(kind: "i-figured-image"): i => {
show figure.caption: it => {
place(
center,
[
#text(weight: "bold")[
#it.supplement
#it.counter.display(it.numbering)
]
#it.body
],
dy: 2em,
)
}
i
}
set figure.caption(separator: " ")
show figure.where(kind: image): set block(below: 2.5em)
set enum(number-align: start + top)
show enum.item: it => context {
if (it.number == auto) {
return it
}
let spacing = enum.indent
if spacing == auto {
if enum.tight {
spacing = par.leading
} else {
spacing = par.spacing
}
}
(
h(spacing)
+ [#{ str(it.number) + ")" }]
+ h(enum.body-indent)
+ it.body
+ linebreak()
)
}
set ref(supplement: "หัวข้อ")
doc
}
@@ -132,7 +201,7 @@
),
header: context [
#h(1fr)
#counter(page).display(thai-numbering)
#counter(page).display(page-numbering)
],
)
set text(
+1 -1
View File
@@ -38,7 +38,7 @@
column-gutter: 1fr,
it.indented(it.prefix(), it.body()),
h(1em),
context thai-numbering(counter(page).at(it.element.location()).first()),
context page-numbering(counter(page).at(it.element.location()).first()),
),
)
}