Tải bản đầy đủ (.docx) (68 trang)

NGHIÊN cứu TÍCH hợp THIẾT bị KHÓA cửa THÔNG MINH

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.78 MB, 68 trang )

ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ

Hoàng Thái Dương

NGHIÊN CỨU TÍCH HỢP
THIẾT BỊ KHÓA CỬA THÔNG MINH

KHÓA LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY
Ngành: Công nghệ kỹ thuật Cơ điện tử

HÀ NỘI - 2019


ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ

Hoàng Thái Dương

NGHIÊN CỨU TÍCH HỢP
THIẾT BỊ KHÓA CỬA THÔNG MINH

KHÓA LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY
Ngành: Công nghệ kỹ thuật Cơ điện tử

Cán bộ hướng dẫn: TS. Nguyễn Ngọc Linh

HÀ NỘI - 2019


LỜI CẢM ƠN


Lời đầu tiên, em xin gửi lời cảm ơn và lòng biết ơn sâu sắc nhất tới TS. Nguyễn Ngọc
Linh, người đã dành tâm huyết hướng dẫn em hoàn thành đồ án tốt nghiệp này. Sự hướng
dẫn tận tình của thầy đã giúp đỡ em rất nhiều trong việc hoàn thành tốt được khóa luận như
ngày hôm nay. Nhờ đó, em đã nhận được rất nhiều bài học quý báu.
Em xin cảm ơn đến Quý thầy cô trường Đại học Công nghệ - Đại học Quốc gia Hà
Nội đã truyền đạt kiến thức trong thời gian đi học cũng như tạo điều kiện thuận lợi trong
quá trình học tập, giúp chúng em có thể hoàn thành đồ án.
Em cũng xin gửi lời cảm ơn tới các anh chị, các bạn sinh viên khoa Cơ học kỹ thuật và
Tự động hóa đã chia sẻ và giúp đỡ em rất nhiều trong quá trình học tập. Đặc biệt, cảm ơn
các bạn trong lớp K60M đã ủng hộ, khuyến khích em trong suốt quá trình 4 năm học tập tại
trường.
Cuối cùng, em muốn được gửi lời cảm ơn tới gia đình thân yêu, bạn bè, những người
đã luôn tin tưởng và ủng hộ em.
Em xin chân thành cảm ơn!
Hà Nội, ngày tháng năm 2019
Sinh viên thực hiện

Hoàng Thái Dương


LỜI CAM ĐOAN
Tôi xin cam đoan nội dung trong khóa luận này là kết quả công trình nghiên cứu của
riêng tôi dưới sự hướng dẫn của TS. Nguyễn Ngọc Linh. Những nội dung tham khảo đều
được trích dẫn từ các tài liệu được liệt kê trong danh mục tài liệu tham khảo của công trình.
Hà Nội, ngày tháng năm 2019
Sinh viên thực hiện

Hoàng Thái Dương



HỆ THỐNG KHÓA CỬA TỰ ĐỘNG THÔNG MINH
SỬ DỤNG MÃ HÓA THỜI GIAN THỰC
Hoàng Thái Dương
Khóa QH-2015-I/CQ, ngành Công nghệ Kỹ thuật Cơ điện tử
TÓM TẮT
Tóm tắt: Hiện nay, với sự phát triển nhanh chóng của xã hội, cùng với đó là mức sống và
nhu cầu xã hội ngày càng tăng, người dân có xu hướng tìm kiếm những giải pháp, thiết bị
thông minh để hỗ trợ con người trong cuộc sống hằng ngày. Cùng với nhu cầu về sự phát
triển, nhu cầu về tính an toàn và bảo mật cũng trở thành một trong những nhu cầu không thể
thiếu trong thời đại công nghệ hiện nay. Từ đó, em quyết định lựa chọn đề tài khoá luận là
phương án giải quyết 2 vấn đề trên thông qua việc xử lý và tối ưu hoá các vấn đề của hệ
thống khoá cửa hiện tại nhằm đáp ứng nhu cầu của xã hội.
Từ khóa: Khóa cửa thông minh, TOTP, …


MỤC LỤC


DANH MỤC HÌNH

7


DANH MỤC BẢNG

8


DANH MỤC TỪ VIẾT TẮT
Tên viết tắt

TOTP
HOTP
UDP
USART
I2C
RTC
MCU
NTP
CLI

Thuật ngữ
Time-based One Time Password
HMAC-based One Time Password
User Diagram Protocol
Universal Synchronous/Asynchronous Receiver Transmitter
Inter-Integrated Circuit
Real Time Clock
Micro Controller Units
Network Time Protocol
Command Line Interface

9


MỞ ĐẦU
Tính cấp thiết của đề tài
Với sự phát triển mạnh mẽ của khoa học và kỹ thuật như hiện nay, việc đảm bảo an
toàn cho ngôi nhà hay căn phòng, tủ để đồ không thể hoàn toàn giao phó cho những chiếc ổ
khóa truyền thống đơn giản. Do đó, những thiết bị khóa cửa thông minh được ra đời với
mục đích nâng cấp cũng như cải thiện khả năng của những chiếc khóa cửa truyền thống

thông thường.
Khóa cửa thông minh được hiểu đơn giản là những loại khóa điện tử với hàm lượng
công nghệ cao tích hợp các tính năng vượt trội, mang đến cho người sử dụng những lợi ích
tuyệt vời hơn bất kỳ loại khóa truyền thống nào. Với khóa thông minh, việc khóa và mở cửa
trở nên vô cùng nhanh chóng và thuận tiện chỉ bằng việc xác nhận một chuỗi số trên màn
hình, bằng việc quẹt thẻ hoặc sử dụng dấu vân tay.
Ý nghĩa khoa học và thực tiễn của khóa luận
Việc nghiên cứu và phát triển các hệ thống khóa cửa nói riêng và các hệ thống khóa
thông minh nói chung có một vai trò quan trọng trong việc phát triển một hệ sinh thái thông
minh như phòng thông minh, nhà thông minh hay thậm chí là thành phố thông minh. Từ đó
con người có thể sử dụng các công cụ công nghệ hiện đại như một trợ lý để kiểm soát các
vấn đề trong cuộc sống của bản thân mình chỉ với một chiếc điện thoại đơn giản hay một
chiếc máy tính có kết nối mạng internet. Qua đó, chất lượng sống của con người được cải
thiện, giúp nâng cao chất lượng sống của xã hội.
Bên cạnh đó, việc nghiên cứu và phát triển các hệ thống khóa cửa thông minh có tính
ứng dụng cao mang đến cho người sử dụng những trải nghiệm về một hệ thống khóa có tính
tin cậy cao, khả năng kiểm soát cũng như việc chia sẻ chìa khóa một cách dễ dàng. Người
sử dụng có thể hoàn toàn yên tâm mỗi khi đi ra ngoài và luôn nhận được thông báo mỗi khi
có người mở cửa, đóng cửa hay đơn giản là mở cửa cho khách vào nhà chờ trong khi đang
trên đường về nhà…
Đối tượng và phương pháp nghiên cứu
Đối tượng nghiên cứu như đã nêu ở trên, khóa luận này chú trọng vào việc nghiên
cứu và thiết kế hệ thống khóa cửa thông minh tự động có thể thay thế hoặc cải thiện hệ
thống khóa cửa truyền thống có tính ứng dụng cao.
Phương pháp nghiên cứu dựa trên các sản phẩm có sẵn trên thị trường, tham khảo và
nghiên cứu các đặc tính của các sản phẩm đó, từ đó đưa ra một hệ thống có tính chính xác
và độ tin cậy cao, trở thành một sự lựa chọn phù hợp cho người sử dụng trong những hoàn
cảnh và điều kiện thực tế khác nhau.

10



Nội dung nghiên cứu
Nghiên cứu cấu tạo và các yêu cầu cần có của một hệ thống khóa cửa thông minh tự
động và các tính năng cũng như cách thức hoạt động của hệ thống khóa cửa thông minh, cụ
thể ở đây là hệ thống khóa cửa thông minh sử dụng phím bấm.
Nghiên cứu để cải thiện tính năng của hệ thống khóa cửa thông minh sử dụng phím
bấm, bắt đầu từ ưu, nhược điểm của hệ thống để đưa ra giải pháp phù hợp. Cụ thể là sử
dụng giải pháp mã hóa mật khẩu dựa trên thời gian thực để tối ưu tính năng bảo mật của hệ
thống khóa cửa.
Nghiên cứu về thuật toán mã hóa thời gian thực, sử dụng như một giải pháp để nâng
cấp cho hệ thống khóa cửa thông minh hiện tại đang có trên thị trường.
Từ đó, xây dựng các thiết kế về mạch điện tử, các hệ thống cơ khí và đóng gói đưa ra
một hệ thống khóa cửa hoàn thiện có khả năng tích hợp và ứng dụng cao.

11


1
1.1.

TỔNG QUAN VỀ ĐỀ TÀI

Nhu cầu về khóa cửa thông minh

Hiện nay, với sự phát triển mạnh mẽ của ứng dụng điện toán đám mây và các giao
tiếp không dây, việc “thông minh hóa” các hoạt động trong cuộc sống hằng ngày rất được
quan tâm và phát triển. Bắt đầu từ những thói quen sử dụng điện thoại thông minh, trợ lý ảo
thông minh giúp sắp xếp thời gian biểu hay thông báo lịch hẹn, hay các ứng dụng tài chính
thông minh giúp cân đối tài chính cá nhân, gia đình… cho đến cả những cảnh báo tắc

đường, chỉ đường khi tham gia giao thông, tất cả mọi thứ giờ đây chỉ nằm gọn trong túi
quần của bạn. Và tất nhiên, nhà thông minh cũng bắt đầu trở thành một xu thế, khi chiếc
điện thoại thông minh giờ đây có thể giúp bạn kiểm soát ngôi nhà của mình thông qua các
cảnh báo SMS hay Email về mọi thứ bạn muốn như nhiệt độ phòng, bật tắt đèn từ xa, kiểm
soát điện năng tiêu thụ… và quan trọng nhất là các cảnh báo về an ninh trong ngôi nhà của
bạn.
Để đáp ứng nhu cầu đó, khóa cửa thông minh được sinh ra để giúp người dùng kiểm
soát việc ra vào ngôi nhà của họ, mở cửa/ khóa cửa từ xa, và đương nhiên là sẽ đáng tin cậy
hơn rất nhiều so với ổ khóa truyền thống. Các loại khóa cửa thông minh phổ biến nhất hiện
nay sử dụng 3 cơ chế khóa chính, đó là: mở khóa bằng thẻ từ, mở khóa bằng vân tay và mở
khóa bằng phím số.
Không chỉ vậy, khóa cửa thông minh có chức năng chính là tăng cường độ tin cậy về
bảo mật, do đó nó có thể được ứng dụng vào nhiều hệ thống khóa khác như khóa cửa phòng,
khóa cửa tủ, khóa cửa hầm, két sắt…
Với hiệu năng làm việc, độ tin cậy và tính ứng dụng cao, khóa cửa thông minh dần
trở thành một xu thế tất yếu trong cuộc sống hằng ngày của con người.

1.2.

Các hệ thống, thiết bị khóa phổ biến

1.2.1. Hệ thống khóa cửa truyền thống
Khoá cửa truyền thống là hệ thống khoá cửa sử dụng chìa để mở, thường phổ biến ở
các khu vực dân cư, cụm dân cư hoặc nhà dân.
Khóa cửa truyền thống thường sử dụng cơ chế mở khóa đơn giản (chìa/ổ khóa) cùng
với cơ cấu vật lý 100%.

12



Hình 1.2.1.1.1.
-

Cấu tạo khóa cửa tay gạt

Ưu điểm: đơn giản, hoạt động ổn định, bền và chắc chắn do hệ thống hoạt động
100% dựa trên cơ học.
Nhược điểm: tính bảo mật kém, thao tác mở khóa nhiều khi gây cảm giác mất
thời gian. Sử dụng sau một thời gian dài có thể bị ảnh hưởng bởi môi trường và
thời tiết gây ra những hiện tượng như hóc khóa, kẹt chìa…

Hình 1.2.1.1.2.

Nguyên lý hoạt động của khóa cửa mở bằng chìa

13


1.2.2. Hệ thống khóa cửa thông minh
Các loại khoá thông minh được sử dụng phổ biến hiện nay:
Thẻ từ (RFID hoặc NFC)

Hình 1.2.2.1.1.
-

Khóa cửa thông minh sử dụng RFID

Ưu điểm: thao tác mở khóa nhanh, hiệu quả và tính ổn định cao.
Nhược điểm: khả năng chia sẻ phức tạp hơn rất nhiều so với khóa cửa truyền
thống.


Mã pin

Hình 1.2.2.1.2.
-

Khóa cửa thông minh sử dụng mật khẩu số

Ưu điểm: thao tác mở khóa nhanh, chỉ cần bấm mà không cần rút bất kì thứ gì trong
túi ra.
Nhược điểm: khó khăn trong việc tối ưu hóa tính bảo mật (độ dài mật khẩu gia tăng
tính bảo mật nhưng ảnh hưởng đến trải nghiệm người dùng).
14


Vân tay

Hình 1.2.2.1.3.
-

1.3.

Khóa cửa thông minh sử dụng vân tay

Ưu điểm: hoạt động ổn định và gần như không có vấn đề về cảm biến phần cứng do
vòng đời sản phẩm khá cao.
Nhược điểm: chi phí cao, có thể bị ảnh hưởng bởi các yếu tố như hơi nước, bụi bẩn
hay thậm chí là mồ hôi tay.
Hệ thống khóa cửa thông minh sử dụng mật khẩu TOTP (Time-base One Time


Password)
Qua một số ví dụ ở trên, có thể thấy được những ưu điểm và nhược điểm của các
phương pháp bảo mật dành cho khóa cửa thông minh đang được sử dụng phổ biến hiện nay.
Từ đó đưa ra một phương pháp để tối ưu hệ thống khóa cửa thông minh sử dụng bảo mật
bằng bàn phím số: sử dụng mật khẩu mã hóa thời gian thực.
Với việc sử dụng thuật toán mã hóa mật khẩu theo thời gian thực, vấn đề về tính bảo
mật của mật khẩu mở khóa sẽ được giải quyết mà không cần phải tăng độ dài kí tự của mật
khẩu, cũng như không yêu cầu người dùng phải nhớ các chuỗi kí tự ngẫu nhiên không bao
gồm các yếu tố chứa thông tin cá nhân của họ. Mật khẩu được sinh ra sẽ khác nhau với mỗi
lần mở khóa khác nhau tại các thời điểm khác nhau, người dùng sẽ nhận được mật khẩu qua
ứng dụng điện thoại kể cả khi điện thoại của họ không được kết nối với mạng Internet.

15


CHƯƠNG 2.
2.1.

CƠ SỞ LÝ THUYẾT

Thuật toán mã hóa TOTP (Time-based One Time Password) [1][2]

2.1.1. Sơ lược về thuật toán HOTP
Ở phần này sẽ giới thiệu qua về thuật toán HOTP, là thuật toán gốc của thuật toán mã
hóa chính được sử dụng trong đề tài.
2.1.1.1.

Kí hiệu và mô tả thuật toán

Một chuỗi luôn là một chuỗi nhị phân, nghĩa là một chuỗi gồm các số 0 và 1.

-

Nếu s là một chuỗi thì | s | biểu thị chiều dài của chuỗi đó.
Nếu n là một số thì | n | biểu thị giá trị tuyệt đối của số đó.
Nếu s là một chuỗi thì s[i] biểu thị bit thứ i của nó.
Chuỗi được bắt đầu từ bit ở vị trí 0 cho nên s = s[0] s[1] … s[n-1] trong đó n = | s
| là chiều dài của s.

Đặt StToNum (Chuỗi thành số) là hàm có chức năng trả về số có biểu diễn nhị phân
là chuỗi s được nhập vào. (VD: StToNum(110) = 6).
Một số ký tự được sử dụng trong thuật toán:
C

Biến giá trị đếm 8-byte, biến đếm này phải được đồng bộ giữa thiết bị
tạo mã và máy chủ xác thực mã.

K

Bí mật được chia sẻ (khóa) giữa thiết bị tạo mã và máy chủ xác thực
mã. Mỗi thiết bị tạo mã sẽ có một khóa riêng của mình.

T

Tham số điều chỉnh: máy chủ sẽ từ chối kết nối từ một người dùng
sau T lần cố gắng xác thực không thành công.

s

Tham số đồng bộ hóa: máy chủ sẽ cố gắng xác minh một mã xác thực
nhận được sau s lần gửi mã xác thực liên tiếp.


Digit

Số kí tự trong một mã HOTP sau khi được mã hóa (tham số hệ thống).

Mô tả thuật toán:
Thuật toán HOTP dựa trên giá trị truy cập tăng dần (C) và khóa đối xứng tĩnh
(K) để đưa ra một mã xác thực thông qua thuật toán mã hóa HMAC-SHA-1.
Vì đầu ra của thuật toán SHA-1 là 160 bit, do đó chúng ta phải rút gọn giá trị
này thành một giá trị là một chuỗi có thể dễ dàng được nhập bởi người dùng (ví
dụ như chuỗi số hoặc chữ cái hoặc cả 2):
HOTP(K, C) = Truncate(HMAC-SHA-1(K, C))
Trong đó: Truncate là hàm chuyển đổi rút gọn một giá trị mã hóa HMACSHA-1 thành một chuỗi mã hóa HOTP (chi tiết sẽ được nói ở phần bên dưới). Giá
trị đầu ra của phép tính này được lưu dưới dạng một dữ liệu big edian.
16


2.1.1.2.

Cách tạo một giá trị HOTP

Cách tạo một giá trị HOTP có thể được mô tả qua 3 bước riêng biệt:
Bước 1: Tạo giá trị bằng thuật toán mã hóa HMAC-SHA-1.
HS = HMAC-SHA-1 (K, C) // HS là một chuỗi giá trị 20 bytes
Bước 2: Tạo 1 chuỗi 4 bytes (Cắt ngắn động).
Đặt Sbits = DT (HS) // DT, được định nghĩa bên dưới,
// trả về chuỗi 31 bit
Bước 3: Tính toán giá trị HOTP.
Đặt Snum = StToNum (Sbits) // Chuyển đổi S thành một số trong
// khoảng 0 ... 231 -1

Trả về D = Snum mod 10 ^ Digit // D là một số trong khoảng
// 0 ... 10Digit -1
Hàm Truncate sẽ bao gồm bước 2 và bước 3 ở trên, tức là cắt ngắn động sau đó lấy
kết quả đó và chia lấy dư cho 10 Digit. Mục đích của phương pháp cắt ngắn động là trích xuất
4 byte mã nhị phân động từ 20 byte kết quả của phép tính mã hóa SHA-1.
DT(String) // String = String[0]...String[19]
Đặt OffsetBits là 4 bits thứ tự thấp của String[19].
Offset = StToNum (OffsetBits) // 0 <= Offset <= 15
Đặt P = String[Offset] ... String[Offset + 3]
// Trả lại 31 bit cuối cùng của P
Lý do sử dụng phương pháp bit masking cho những bit quan trọng của P là để tránh
sự nhầm lẫn khi sử dụng phép toán chia lấy dư cho các biến kiểu signed và unsigned. Các
bộ xử lý khác nhau sẽ cho các kết quả khác nhau khi thực hiện phép toán này, do đó việc sử
dụng phương pháp bit masking sẽ loại bỏ được sự không rõ ràng kể trên.
Để đảm bảo tính bảo mật của thuật toán, kết quả cuối cùng cần phải xuất ra kết quả
có độ dài ít nhất là 6 kí tự hoặc có thể là 7 hoặc 8 kí tự.

17


2.1.2. Giới thiệu chung
Thuật toán mã hóa TOTP là thuật toán mở rộng của thuật toán mật khẩu một lần
(One Time Password), cụ thể là thuật toán HOTP được trình bày ở trên, dùng để hỗ trợ cho
bài toán mã hóa với các tham số đầu vào phụ thuộc theo thời gian.
Theo định nghĩa ở phần trên, thuật toán HOTP là thuật toán dựa trên thuật toán mã
hóa HMAC-SHA-1 với một biến số đếm tăng dần sau mỗi lần tính toán, và được rút gọn
thành một chuỗi các ký tự (bao gồm chữ hoặc số hoặc cả chữ và số):
HOTP(K, C) = Truncate(HMAC-SHA-1(K, C))
Trong đó, K là mật mã được chia sẻ và C là biến số đếm tăng dần.
Như đã nói ở trên, TOTP là thuật toán mã hóa mở rộng của HOTP với tham số đầu

vào phụ thuộc theo thời gian, do đó biến số C ở trên sẽ được thay thế bằng biến số T phụ
thuộc theo thời gian. Bên cạnh đó, thuật toán TOTP còn có thể sử dụng các hàm băm mật
mã SHA-256 hoặc SHA-512 để thay thế cho SHA-1 được sử dụng trong thuật toán HOTP
trình bày ở trên.
2.1.3. Yêu cầu thuật toán
-

-

R1: Các Prover (mã thông báo, mã thông báo mềm…) và Verifier (máy chủ xác thực
hoặc tương tự) phải biết hoặc có thể lấy được thời gian Unix hiện tại (số giây trôi qua
kể từ ngày 1 tháng 1 năm 1970) để tạo OTP. Độ chính xác của thời gian có được sẽ
ảnh hưởng đến tần suất đồng bộ của đồng hồ.
R2: Các Prover và Verifier phải chia sẻ cùng 1 bí mật hoặc kiến thức về một sự thay
đổi bí mật để tạo ra 1 bí mật được chia sẻ.
R3: Phải sử dụng thuật toán HOTP làm khối chính để xây dựng thuật toán.
R4: Các Prover và Verifier phải sử dụng cùng một giá trị bước thời gian X.
R5: Mỗi Prover phải có một khóa bí mật đặc biệt của riêng mình.
R6: Các khóa nên được tạo ngẫu nhiên hoặc được mã hóa bằng thuật toán đạo hàm.
R7: Khóa có thể được lưu trữ trong các thiết bị chống giả mạo và nên được bảo vệ để
chống lại việc truy cập và sử dụng trái phép.

2.1.4. Thuật toán TOTP
Biến thể của thuật toán HOTP này xác định việc tính toán giá trị của một OTP dựa
trên tham số thời gian thay vì sử dụng biến đếm tăng dần.
Ký hiệu:
-

X là giá trị của mỗi bước thời gian (tính bằng giây), được sử dụng như một tham
số hệ thống.

T0 là thời điểm bắt đầu đếm các bước thời gian (tính theo thời gian Unix) và cũng
được sử dụng như một tham số hệ thống.

Về cơ bản, thuật toán TOTP được định nghĩa như sau:
TOTP = HOTP(K, T)
18


Cụ thể hơn, T = (Thời gian Unix hiện tại – T0) / X, là một hàm cơ bản mặc định được
sử dụng trong việc tính toán.
Ví dụ: với T0 = 0 và Bước thời gian X = 30, T = 1 nếu hiện tại Thời gian Unix là 59
giây và T = 2 nếu thời gian Unix hiện tại là 60 giây.
Việc thực hiện thuật toán này yêu cầu bộ nhớ dành cho giá trị thời gian phải lớn hơn
số nguyên 32-bit khi vượt quá năm 2038. Giá trị của các tham số hệ thống X và T0 phải
được thiết lập trước trong quá trình cung cấp và giao tiếp giữa Prover và Verifier.
2.1.5. Chú ý về bảo mật
Một OTP được tạo ra trong cùng 1 bước thời gian sẽ luôn giống nhau. Khi một hệ
thống xác thực nhận được 1 OTP, hệ thống sẽ không biết thời điểm chính xác mà OTP đó
được tạo ra trên thiết bị khách. Do đó, hệ thống thường có thể sử dụng dấu thời gian mỗi khi
nhận được một OTP cho việc so sách các OTP.
Do độ trễ mạng, khoảng cách giữa thời gian mà OTP đã được tạo cho đến lúc hệ
thống xác thực nhận được OTP đó có thể lớn, dẫn đến thời gian khi OTP được tạo ra và thời
gian hệ thống nhận được OTP đó có thể không cùng một bước thời gian. Vì vậy, một hệ
thống xác thực nên đặt ra những quy tắc dành cho những trường hợp truyền OTP với độ trễ
chấp nhận được (thường sẽ là nhiều nhất 1 bước thời gian).
Độ dài của bước thời gian cũng sẽ tác động đến cả tính bảo mật và trải nghiệm sử
dụng. Bước thời gian dài hơn nghĩa là sẽ có khoảng thời gian dài hơn cho mỗi lần tạo ra mã
mới và giao tiếp với hệ thống xác thực, từ đó sẽ tạo ra nhiều cơ hội hơn để cho các cuộc tấn
công từ bên thứ 3 sử dụng OTP được tạo ra trong khoảng thời gian này để truy cập vào hệ
thống xác thực. Còn nếu trường hợp bước thời gian quá ngắn sẽ gây khó khăn cho người sử

dụng khi mà OTP được tạo ra chưa được gửi đến hệ thống xác thực đã bị thay đổi do thời
gian nhảy sang một bước mới. Do đó, độ dài của bước thời gian được khuyến nghị là 30s,
đây là khoảng thời gian có thể cân bằng giữa bảo mật và trải nghiệm người dùng.

2.2.

Giao tiếp ngoại vi

2.2.1. Giao tiếp với sever sử dụng giao thức UDP (User Datagram Protocol) [3]
Giới thiệu chung về giao thức
Giao thức gói dữ liệu người dùng (UDP) là một trong những giao thức cốt lõi của
TCP/IP (Giao thức điều khiển truyền và Giao thức liên mạng). Giao thức này cho phép các
tổ hợp máy tính được kết nối với nhau trong cùng một môi trường mạng có thể giao tiếp với
nhau bằng cách chuyển tiếp dữ liệu dưới dạng gói (diagram packet).
Giao thức này cung cấp một quy trình cho các chương trình ứng dụng gửi tin nhắn
đến các chương trình khác với một cơ chế tối thiểu hóa dữ liệu và thời gian truyền cho mỗi
19


lần giao tiếp. Trong giao thức này hướng truyền, tính phân phối và bảo vệ việc lặp dữ liệu
của các gói dữ liệu khi gửi không được đảm bảo cho nên sẽ không được sử dụng cho các
giao tiếp có yêu cầu cao về sự tin cậy của luồng dữ liệu.
Tuy nhiên, với yêu cầu của bài toán đặt ra là truy vấn dữ liệu thời gian trên sever,
giao thức UDP là một giao thức phù hợp bởi đặc tính cho phép truyền nhận các gói dữ liệu
nhỏ trong thời gian ngắn và không quan tâm đến thứ tự truyền nhận của dữ liệu. Từ đó, yêu
cầu về tính chính xác của thông số thời gian sẽ được thỏa mãn bằng một số lượng lớn các
truy vấn nhỏ trong thời gian ngắn.
Cấu trúc gói dữ liệu và cách thức truyền nhận
Trong bộ giao thức TCP/IP, UDP cung cấp một giao diện rất đơn giản giữa tầng
mạng bên dưới (thí dụ, IPv4) và tầng phiên làm việc hoặc tầng ứng dụng phía trên. UDP

không đảm bảo cho các tầng phía trên thông điệp đã được gửi đi và người gửi cũng không
có trạng thái thông điệp UDP một khi đã được gửi (Vì lý do này đôi khi UDP còn được gọi
là Unreliable Datagram Protocol). UDP chỉ thêm các thông tin multiplexing và giao dịch.
Các loại thông tin tin cậy cho việc truyền dữ liệu nếu cần phải được xây dựng ở các tầng cao
hơn.
Dưới đây bảng thể hiện cấu trúc gói dữ liệu của một tập tin UDP:

Cấu trúc gói dữ liệu UDP
Phần header của UDP chỉ chứa 4 trường dữ liệu, trong đó có 2 trường là tùy chọn (ô
nền đỏ trong bảng).
-

-

Source port: Trường này xác định cổng của người gửi thông tin và có ý nghĩa nếu
muốn nhận thông tin phản hồi từ người nhận. Nếu không dùng đến thì đặt nó bằng 0.
Destination port: Trường xác định cổng nhận thông tin, và trường này là cần thiết.
Length: Trường có độ dài 16 bit xác định chiều dài của toàn bộ datagram: phần
header và dữ liệu. Chiều dài tối thiểu là 8 byte khi gói tin không có dữ liệu, chỉ có
header.
Checksum: Trường checksum 16 bit dùng cho việc kiểm tra lỗi của phần header và
dữ liệu, thường được thêm bit 0 vào cuối (nếu cần) để tạo ra bội của 2 octets. Phương
pháp tính toán checksum cũng giống như phương pháp dùng trong giao thức TCP.

20


2.2.2. Giao tiếp truyền thông nối tiếp USART [4]
Giao tiếp truyền thông nối tiếp USART (Universal Synchronous & Asynchronous
Receiver - Transmitter) có chức năng chính là truyền dữ liệu nối tiếp giữa các vi điều khiển.


Hình 2.2.2.1.1.

Truyền thông USART

Sơ đồ khối UART
Sơ đồ khối UART bao gồm hai thành phần là máy phát và máy thu được hiển thị bên
dưới. Phần máy phát bao gồm ba khối là thanh ghi giữ truyền, thanh ghi dịch chuyển và
logic điều khiển. Tương tự, phần máy thu bao gồm một thanh ghi giữ, thanh ghi thay đổi và
logic điều khiển. Hai phần này thường được cung cấp bởi một bộ tạo tốc độ baud. Trình tạo
này được sử dụng để tạo tốc độ khi phần máy phát và phần máy thu phải truyền hoặc nhận
dữ liệu.
Thanh ghi giữ trong máy phát bao gồm byte dữ liệu được truyền. Các thanh ghi thay
đổi trong máy phát và máy thu di chuyển các bit sang phải hoặc trái cho đến khi một byte
dữ liệu được truyền hoặc nhận. Một logic điều khiển đọc (hoặc) ghi được sử dụng để biết
khi nào nên đọc hoặc viết.
Máy phát tốc độ baud giữa máy phát và máy thu tạo ra tốc độ dao động từ 110 bps
đến 230400 bps. Thông thường, tốc độ truyền của vi điều khiển là 9600 đến 115200.

Hình 2.2.2.1.2.

Sơ đồ khối USART
21


Các khái niệm quan trọng trong chuẩn truyền thông USART:

Hình 2.2.2.1.3.

Khung truyền USART


Baudrate: Số bit truyền được trong 1s, ở truyền nhận không đồng bộ thì ở các bên
truyền và nhận phải thống nhất Baudrate. Các thông số tốc độ Baudrate thường hay sử dụng
dể giao tiếp với máy tính là 600, 1200, 2400, 4800, 9600, 14400, 19200, 38400, 56000,
57600, 115200.
Frame: Ngoài việc giống nhau của tốc độ baud 2 thiết bị truyền nhận thì khung
truyền của bên cũng được cấu hình giống nhau. Khung truyền quy định số bit trong mỗi lần
truyền, bit bắt đầu “Start bit”, các bit kết thúc (Stop bit), bit kiểm tra tính chẵn lẻ (Parity),
ngoài ra số bit quy định trong một gói dữ liệu cũng được quy định bởi khung truyền. Có thể
thấy, khung truyền đóng một vai trò rất quan trọng trong việc truyền thành công dữ liệu.
-

Idle frame: Đường truyền UART ở mức “1”, để xác nhận hiện tại đường truyền dữ
liệu trống, không có frame nào đang được truyền đi.
Break frame: Đường truyền UART ở mức “0”, để xác nhận hiện tại trên đường
truyền đang truyền dữ liệu, có frame đang được truyền đi.

Start bit: Bit đầu tiên được truyền trong một frame, bit này có chức năng báo cho
bên nhận rằng sắp có một gói dữ liệu truyền đến. Đường truyền UART luôn ở trạng thái cao
mức “1” cho đến khi chip muốn truyền dữ liệu đi thì nó gởi bit start bằng cách kéo xuống
mức “0”. Như vậy start bit giá trị điện áp 0V và phải bắt buộc có bit start trong khung
truyền.
Data: Data hay dữ liệu là thông tin mà chúng ta nhận được trong quá trình truyền và
nhận. Data trong STM32 có quy định khung truyền là 8bit hoặc 9bit. Trong quá trình truyền
UART, bit có trọng số thấp nhất (LSB – least significant bit – bên phải) sẽ được truyền
trước và cuối cùng là bit có ảnh hưởng cao nhất (MSB – most significant bit – bên trái).

22



Parity bit: Parity dùng để kiểm tra dữ liệu truyền có đúng hay không. Có 2 loại
Parity đó là Parity chẵn (even parity) và parity lẽ (odd parity). Parity chẵn nghĩa là số bit 1
trong trong data truyền cùng với bit Parity luôn là số chẵn, ngược lại nếu Parity lẽ nghĩa là
số bit 1 trong data truyền cùng với bit Parity luôn là số lẽ. Bit Parity không phải là bit bắt
buộc và vì thế chúng ta có thể loại bỏ bit này ra khỏi khung truyền.
Stop bits: Stop bits là một bit báo cáo để cho bộ truyền/nhận biết được gói dữ liệu đã
được gởi xong. Stop bits là bit bắt buộc phải có trong khung truyền. Stop bits có thể là 1bit,
1.5bit, 2bit, 0.5bit tùy thuộc vào ứng dụng UART của người sử dụng.
Các ứng dụng của UART
UART thường được sử dụng trong các bộ vi điều khiển cho các yêu cầu chính xác và
chúng cũng có sẵn trong các thiết bị liên lạc khác nhau như giao tiếp không dây, thiết bị
GPS, mô-đun Bluetooth và nhiều ứng dụng khác.
Các tiêu chuẩn truyền thông như RS422 & TIA được sử dụng trong UART ngoại trừ
RS232. Thông thường, UART là một IC riêng được sử dụng trong giao tiếp nối tiếp UART.
Ưu điểm và nhược điểm của UART
-

Chỉ cần hai dây để truyền dữ liệu
Tín hiệu CLK là không cần thiết.
Bao gồm một bit chẵn lẻ để cho phép kiểm tra lỗi
Sắp xếp gói dữ liệu có thể được sửa đổi vì cả hai mặt được sắp xếp
Kích thước khung dữ liệu tối đa là 9 bit
Không chứa một số hệ thống phụ (hoặc)
Tốc độ truyền của UART phải ở mức 10% của nhau

2.2.3. Chuẩn giao tiếp I2C [5]
Giới thiệu I2C
I2C là viết tắt của "Inter-Integrated Circuit", một chuẩn giao tiếp được phát minh bởi
Philips’ semiconductor division (giờ là NXP) nhằm đơn giản hóa việc trao đổi dữ liệu giữa
các ICs. Đôi khi nó cũng được gọi là Two Wire Interface (TWI) vì chỉ sử dụng 2 kết nối để

truyền tải dữ liệu, 2 kết nối của giao tiếp I2C gồm: SDA (Serial Data Line) và SCL (Serial
Clock Line).
Có hàng ngàn thiết bị sử dụng giao tiếp I2C, chẳng hạn như real-time clocks, digital
potentiometers, temperature sensors, digital compasses, memory chips, FM radio circuits,
I/O expanders, LCD controllers, amplifiers,...
I2C bus là một chuẩn truyền thông trong hệ thống nhúng (embedded system) rất
được ưa chuộng. Kết nối giữa master (hoặc multimaster) với single slave (hoặc multi slave).
Một trong những ưu điểm nổi bật của chuẩn giao tiếp I2C là nó chỉ duy nhất 2 dây SCL
(serial clock) và SDA (serial data) để truyền nhận tín hiệu.
23


Hình 2.2.3.1.1.

Hệ thống các thiết bị ngoại vi sử dụng chuẩn I2C.

Kéo xuống mức thấp (Open Drain Pulling Low)
Khi giao tiếp qua 2 dây SCL và SDA. IC sẽ tạo ra xung vuông mức cao và mức thấp
để truyền nhận tín hiệu. Nguyên lý để tạo ra mức thấp là khi IC (Slave hoặc Master) kéo
FET xuống mức thấp, VBus sẽ đi qua FET và nối đất (ground) –> Logic 0.

Hình 2.2.3.1.2.

Kéo xuống mức thấp (Pulling the Bus low)

Kéo lên mức cao (Open Drain Releasing Bus)
Khi ngừng kích FET, thì điện áp qua trở kéo Rpu và kéo VBus lên mức cao –> Logic 1.

24



Hình 2.2.3.1.3.

Kéo lên mức cao (Realease the Bus with an Open-drain Interface)

Nguyên lý hoạt động của I2C
Trình tự Master muốn truyền dữ liệu cho Slave:
-

Master là transmitter (IC gửi) sẽ truyền bit START và địa chỉ của Slave.
Master sẽ truyền dữ liệu cho slaver nhận (receiver).
Master sẽ truyền bit STOP để kết thúc quá trình gửi.

Trình tự Master muốn nhận (hoặc đọc) dữ liệu từ Slave:
-

Master là receiver (IC nhận) sẽ truyền bit START và địa chỉ của Slave
(transmitter).
Master (receiver) gửi thanh ghi được yêu cầu để đọc từ Slave (transmitter).
Master (receiver) sẽ nhận dữ liệu từ Slave truyền đến.
Master sẽ gửi bit STOP để kết thúc quá trình gửi.

Bit điều kiện START và STOP
Giao tiếp I2C với thiết bị này được bắt đầu bởi Master gửi điều kiện START và
STOP.
-

Chuyển đổi từ cao –> thấp trên dây SDA trong khi SCL ở mức cao là định nghĩa
START.
Chuyển đổi từ thấp –> cao trên dòng SDA trong khi SCL ở mức cao là định nghĩa

STOP.

25


×