1. Tình trạng
Chương trình kiểm tra và cảnh báo hóa đơn xml bị sửa đổi, kế toán liên hệ nhà cung cấp để xác nhận nhưng nhà cung cấp khẳng định không sửa gì.
2. Nguyên nhân và cách khắc phục
Nội dung này thiên nhiều về vấn đề kỹ thuật. MISA xin phản hồi như sau:
* Thông tin tra cứu từ các trang uy tín là https://tools.chilkat.io/xmlDsigVerify.cshtml
* Thuật toán sử dụng: https://vi.wikipedia.org/wiki/SHA
* Nguyên lý: Đưa file xml qua thuật toán để tạo thành 1 chuỗi duy nhất, sau đó ký trên chuỗi đó => chuỗi XML được ký số hiện tại và không dịch ngược lại được nữa nên không xác định được là sai ở đâu. Bản chất của việc kiểm tra có sửa đổi không là cũng chia nhỏ file XML thành chuỗi xong mang đi so sánh với chuỗi trong chữ ký, nếu bằng nhau là chưa sửa đổi, còn khác là đã sửa đổi.
* Mô tả chi tiết
Các bước thực hiện ký 1 file xml:
– Chia nhỏ dữ liệu XML gốc ban đầu thành 1 chuỗi có độ dài cố định (cái này dùng SHA1 hoặc SHA2, tùy chứng thư số)
– Ký chuỗi dữ liệu chia nhỏ, kết quả là chữ ký (Cái này dùng RSA, lúc ký sẽ cần Private Key có trong USB Token)
– Ghép chuỗi dữ liệu chia nhỏ, chữ ký và các thông tin khác (thuật toán “băm”, thuật toán ký, Public Key, certificate, …) vào file XML => ra kết quả cuối cùng là hóa đơn được ký số
Các bước kiểm tra: dựa vào mấy bước như lúc ký
– Lấy nội dung XML được ký, “băm” (chia nhỏ) thành chuỗi HASH (phải sử dụng đúng thuật toán như lúc ký) => mang so sánh chuỗi hash “băm” được với chuỗi HASH trong chữ ký. Giống nhau là OK, không giống là sửa đổi
– Dùng cái Public Key để verify chữ ký ở bước 2 lúc ký
– Kiểm tra thông tin chứng thư số
* Cách kiểm tra lại: Có thể mang file ký số đã kiểm tra trên Inbot mang check trên các tài khoản demo của các nhà cung cấp khác => ra thông báo kết quả dữ liệu bị chỉnh sửa và không giải thích được sửa ở đâu.
* Hướng xử lý tiếp theo nếu phát hiện XML bị sửa đổi: liên hệ với nhà cung cấp hóa đơn điện tử của hóa đơn để kiểm tra lại và xác nhận sự việc.