我需要创建一个服务,但我需要一个帮助选择工具。
想象一下用户创建一些在历史视图中具有价值的数据(例如交易)的服务。其他用户可以看到这些数据,但他们需要证明数据是真实的,而不是被用户甚至服务伪造。
例:
服务有24小时的信任窗口:它甚至可以更改当天制作的用户数据。
问题:哪些工具可以帮助我实现这一目标?
我在考虑做任何用户可以下载的公共日常备份(或报告?)。从每个报告哈希将被计算并插入到下一个备份中 - 因此,创建了一个哈希变换。如果服务将改变过去的某些东西,那么此链中的哈希将不会收敛。当然,我将创建开源工具,以便于比较数据之间的差异并检查链是否有效。
信任点:有一件事我害怕。服务可以同时使用多个数据库并使用所有哈希值更新所有备份(因为第一个备份没有前一个备份的哈希值)。因此,为了涵盖这种情况,我想在某些地方存储哈希,服务根本无法改变。例如,来自官方服务钱包的现有区块链(btc,eth,...)之一。或者,也许,DAG有一些像IOTA这样的区块链?
这里有2个参与变量
解决方案前提,
CREATE TABLE TEST(
ID INT PRIMARY KEY AUTO_INCREMENT,
DATA VARCHAR(64) NOT NULL,
CREATED_AT DATETIME DEFAULT CURRENT_TIMESTAMP()
);
CREATE TABLE SIGN(
ID INT PRIMARY KEY AUTO_INCREMENT,
DATA_ID INT NOT NULL,
SIGNATURE VARCHAR(128) NOT NULL,
CREATED_AT DATETIME DEFAULT CURRENT_TIMESTAMP(),
UPDATED_AT TIMESTAMP
);
/** Trigger on insert */
DELIMITER //
CREATE TRIGGER sign_after_insert
AFTER INSERT
ON TEST FOR EACH ROW
BEGIN
-- INSERT VAL
INSERT INTO SIGN(DATA_ID, `SIGNATURE`) VALUES(
NEW.ID, MD5(CONCAT (NEW.DATA, DATE(NEW.CREATED_AT)))
);
END; //
DELIMITER ;
-- UPDATE TRIGGER
DELIMITER //
CREATE TRIGGER SIGN_AFTER_UPDATE
AFTER UPDATE
ON TEST FOR EACH ROW
BEGIN
-- UPDATE VALS
IF (NEW.DATA <> OLD.DATA) AND (DATE(OLD.CREATED_AT) = CURRENT_DATE() ) THEN
UPDATE SIGN SET SIGNATURE=MD5(CONCAT(NEW.DATA, DATE(NEW.CREATED_AT))) WHERE DATA_ID=OLD.ID;
END IF;
END; //
DELIMITER ;
INSERT INTO TEST(DATA) VALUES ('DATA2');
数据的签名及其创建日期将反映为SIGN
表中的签名。
如果值已更改且签名将相同,则签名将更新。
UPDATE TEST SET DATA='DATA' WHERE ID =1;
您始终可以将数据签名验证为
SELECT MD5(CONCAT (T.DATA, DATE(T.`CREATED_AT`))) AS CHECKSUM, S.SIGNATURE FROM TEST AS T ,SIGN AS S WHERE S.DATA_ID= T.ID AND S.`id`=1;
| CHECKSUM |签名| | ------ | ------ | | 2bba70178abdafc5915ba0b5061597fa | 2bba70178abdafc5915ba0b5061597fa