E2EE Extension gồm có 3 thành phần (môi trường) chính:
Background (/src/background.js)
Background là thành phần cốt lõi của Extension, luôn chạy mỗi khi trình duyệt được khởi động. Background được thiết kế theo mô hình Event-driven Programming. Background lắng nghe các tin nhắn được gửi từ 2 môi trường còn lại của Extension, phản hồi lại các thông điệp từ đó, giao tiếp với Server và tương tác với các API của Chrome.
Các sự kiện mà Background xử lý gồm có: +) Kiểm tra trạng thái đăng nhập.
+) Yêu cầu E2EE Server gửi khóa công khai của người dùng bất kỳ. +) Mở hộp thoại mã hóa file đính kèm.
+) Chuyển Key mã hóa file đính kèm sang Content-Script để chèn vào nội dung email được mã hóa.
Học viên thực hiện: Bùi Văn Tùng – CAC16002 Khóa CLC2016 Trang 35
Content-Script (/src/content-scripts.js)
Môi trường Content-Script là môi trường chạy cùng với mã nguồn Gmail, HUST Mail. Content-Script phát hiện khi người dùng mở hộp thoại soạn email mới hoặc mở 1 email, kiểm tra xem email đó có phải là email được mã hóa hay không và chèn các đối tượng phục vụ mã hóa và giải mã email trực tiếp vào Website Gmail và HUST Mail, tạo sự thuận tiện cho người dùng.
Popup (/src/popup.html và /src/popup.js)
Môi trường Popup chỉ chạy khi người dùng click vào biểu tượng Extension cạnh thanh địa chỉ của trình duyệt. Popup cho phép người dùng đăng ký, kích hoạt tài khoản và đăng nhập vào Extension trước khi có thể làm những việc khác.
Form Đăng ký
Trước khi có thể sử dụng, người dùng cần đăng ký tài khoản trong hộp thoại của Extension.
Học viên thực hiện: Bùi Văn Tùng – CAC16002 Khóa CLC2016 Trang 36 Sau khi nhập email và mật khẩu hợp lệ (Mật khẩu có độ dài tối thiểu 10 ký tự và tối đa 16 ký tự), Extension gửi thông tin lên E2EE Server yêu cầu thực hiện đăng ký tài khoản mới. E2EE Server kiểm tra email đã đăng ký hay chưa và trả về thông báo cho người dùng.
Học viên thực hiện: Bùi Văn Tùng – CAC16002 Khóa CLC2016 Trang 37 E2EE Server gửi email chứa Activation ID cho người dùng.
Hình 17: Người dùng nhận được mã kích hoạt
Màn hình popup của Extension chuyển sang tab Active cho phép người dùng kích hoạt tài khoản của mình. Tại màn hình Active, người dùng điền mật khẩu và Activation ID nhận được trong email để kích hoạt tài khoản.
Học viên thực hiện: Bùi Văn Tùng – CAC16002 Khóa CLC2016 Trang 38 Tại bước này, Extension tạo mật khẩu đã được mã hóa bằng phương pháp mã hóa MD5 và sinh bộ khóa RSA dựa trên điều kiên cơ sở là email + mật khẩu của người dùng, sau đó gửi bộ dữ liệu gồm Email, mật khẩu đã được mã hóa MD5, Activation ID và khóa công khai vừa sinh lên Server. Server kiểm tra tính hợp lệ và cập nhật tình trạng tài khoản người dùng.
Học viên thực hiện: Bùi Văn Tùng – CAC16002 Khóa CLC2016 Trang 39 Server kiểm tra xong sẽ báo kết quả về Client. Extension chuyển người dùng sang giao diện đăng nhập.
Hình 20: Form đăng nhập
Extension gửi email và mật khẩu của người dùng lên server để thực hiện đăng nhập. Nếu hợp lệ, Extension lưu email vào trong Local Storage của trình duyệt, đánh dấu trạng thái tài khoản đã đăng nhập vào Extension.
Học viên thực hiện: Bùi Văn Tùng – CAC16002 Khóa CLC2016 Trang 40 Trường hợp tổng quát khi người dùng muốn gửi 1 email bí mật ra ngoài:
+) Gửi email cho nhiều người.
+) Trong số người nhận có tài khoản đã đăng ký E2EE và tài khoản chưa đăng ký. +) Người nhận bao gồm cả tài khoản Gmail và HUST Mail.
+) Email có nhiều tệp đính kèm cần giữ bí mật. +) Nội dung email được định dạng cho dễ nhìn.
Dưới đây là những việc Extension sẽ làm để xử lý trường hợp trên:
Giả sử tài khoản e2ee.test.user1@gmail.com muốn gửi email cho 2 tài khoản
e2ee.test.user2@gmail.com và dung.nguyentuan@hust.edu.vn. Tình trạng đăng ký tài
khoản trong database:
Hình 22: Thông tin người dùng trong cơ sở dữ liệu
Khi e2ee.test.user1@gmail.com mở hộp thoại soạn email của Gmail, E2EE Extension phát hiện và chèn thêm 2 nút vào thanh toolbar trong hộp thoại:
Hình 23: Các nút được chèn trong thanh công cụ
Trong đó có nút Encrypt là để mã hóa email và gửi, nút bên cạnh dùng để mã hóa tệp đính kèm. Khi ấn vào sẽ mở ra cửa sổ mới cho phép chọn và mã hóa các file đính kèm.
Học viên thực hiện: Bùi Văn Tùng – CAC16002 Khóa CLC2016 Trang 41 Như trong hình, người dùng có thể chọn nhiều file muốn gửi kèm email, Extension sẽ sinh ra 1 key ngẫu nhiên và dùng mã hóa AES để mã hóa tất cả các file đó thành 1 file attachments.encrypted và tải xuống máy như trong hình. Toàn bộ quá trình chọn file và nén file cũng như lưu file lại hoàn toàn thực hiện trên trình duyệt, không hề có bất cứ liên lạc nào tới Server hay nguồn bên ngoài. Key dùng để mã hóa tệp đính kèm được gửi sang lưu tại môi trường Background để chèn vào nội dung email gửi đi.
Sau khi soạn xong email, e2ee.test.user1@gmail.com đính kèm attachments.encrypted vào email như là tệp đính kèm thông thường, nhập địa chỉ người nhận và ấn Encrypt. Lúc này, Content-Script lọc tất cả email người nhận (kể cả CC, BCC) gửi tin nhắn đến Background, yêu cầu khóa công khai của người nhận và cả của bản thân e2ee.test.user1@gmail.com . Server nhận được yêu cầu, kiểm tra thấy có truy vấn Khóa công khai của 3 tài khoản e2ee.test.user1@gmail.com, e2ee.test.user2@gmail.com và dung.nguyentuan@hust.edu.vn . Trong đó database trên server chưa có email dung.nguyentuan@hust.edu.vn. Server tạo 1 Initial Key ngẫu nhiên, không trùng với bất kỳ Initial Key nào trong database và sinh khóa công khai dựa trên Initial Key này, sau đó trả 3 Khóa công khais về cho Extension.
Tài khoản cho dung.nguyentuan@hust.edu.vn được tạo 1 khóa công khai tạm thời trong database:
Học viên thực hiện: Bùi Văn Tùng – CAC16002 Khóa CLC2016 Trang 42 Nội dung email ban đầu
Học viên thực hiện: Bùi Văn Tùng – CAC16002 Khóa CLC2016 Trang 43 Background gửi Key đã dùng để mã hóa file đính kèm sang cho Content-Script. Email được mã hóa thành 3 bản khác nhau cho 3 người, sau đó được ghép lại và gửi đi cho
e2ee.test.user2@gmail.com và dung.nguyentuan@hust.edu.vn . Email được mã hóa
bằng Khóa công khai của mỗi người nhận thành nội dung đã được mã hóa, sau đó được đính kèm tên người nhận vào cuối mỗi nội dung mã hóa và mã hóa tiếp bằng AES với key được định trước bởi Extension. 3 bản mã được phân cách bởi hằng STR_SEPERATOR định nghĩa sẵn trong Extension để khi giải mã có thể bóc tách ra từng email cho từng người.
Hình 26: Mã hóa nội dung email
Học viên thực hiện: Bùi Văn Tùng – CAC16002 Khóa CLC2016 Trang 44
Trong hộp thư đã gửi của e2ee.test.user1@gmail.com, Extension phát hiện có email đã
được mã hóa nên chèn thêm khung gồm các nút để người gửi có thể giải mã email nếu muốn đọc lại.
Giải mã email
Khi e2ee.test.user2@gmail.com nhận được email, vì đã có tài khoản E2EE và đăng nhập từ trước nên e2ee.test.user2@gmail.com tải file đính kèm về như thường, sau đó kéo thả file đó vào khung Decrypt mà Extension thêm vào cuối email và ấn Decrypt, Extension mở hộp thoại yêu cầu nhập mật khẩu.
Hình 28: Yêu cầu xác thực khi giải mã email
Sau khi nhập xong, Content-Script gửi yêu cầu cho Background, yêu cầu xác thực mật khẩu với Server. Server trả về thông điệp:
Học viên thực hiện: Bùi Văn Tùng – CAC16002 Khóa CLC2016 Trang 45 Do e2ee.test.user2@gmail.com là tài khoản đăng nhập từ trước nên không có initialKey, Extension sinh bộ RSA Key từ email và mật khẩu của e2ee.test.user2@gmail.com
Hình 30: Thông tin mà E2EE Extension sử dụng
Extension dùng Private Key này để giải mã nội dung email lấy được nội dung gốc và AES Key để giải mã file đính kèm vừa được người dùng kéo vào. Sau đó thay thế nội dung gốc của email:
Hình 31: Nội dung email sau khi giải mã
Như trong hình, email đã được giải mã đúng như nguyên gốc, 2 file đính kèm gốc đã được giải mã và tải xuống máy tính của người dùng thành công.
Đối với dung.nguyentuan@hust.edu.vn , do trước đó chưa đăng ký tài khoản E2EE nên chưa thể giải mã email. Người dùng này thực hiện đăng ký và Active tài khoản như bình thường. Nhưng khi nhấn Decrypt và nhập mật khẩu, Server trả lại thông điệp cho Extension bao gồm có Initial Key như sau:
Học viên thực hiện: Bùi Văn Tùng – CAC16002 Khóa CLC2016 Trang 46
Hình 32: Thông tin về khóa khởi tạo khi người dùng chưa đăng kí
Extension tạo ra 2 bộ RSA Key, 1 bộ từ initial Key này và 1 bộ từ email + mật khẩu của người dùng:
Học viên thực hiện: Bùi Văn Tùng – CAC16002 Khóa CLC2016 Trang 47 Sau đó Extension thử Decrypt email bằng 2 bộ key này và thay thế nội dung email gốc + tải file đính kèm gốc xuống máy tình người dùng như thường.
Học viên thực hiện: Bùi Văn Tùng – CAC16002 Khóa CLC2016 Trang 48