gpt4 book ai didi

database - 为服务的最终用户提供伪造数据保护——工具?

转载 作者:搜寻专家 更新时间:2023-10-30 19:50:07 25 4
gpt4 key购买 nike

我需要创建服务,但我需要帮助选择工具。

想象一下用户创建一些在历史 View 中具有值(value)的数据(例如交易)的服务。其他用户可以看到这些数据,但他们需要证明数据是真实的,并且没有被用户甚至服务伪造。

例子:

  1. 用户 A 创建了编号为 42 的记录
  2. 几个月过去了
  3. 用户 B 看到这条记录并希望确保服务不能用任何其他数字 37 更新这条记录

服务有 24 小时的信任窗口:它甚至可以更改当天创建的用户数据。

问题:哪些仪器可以帮助我实现这一目标?


我正在考虑进行任何用户都可以下载的公共(public)每日备份(或报告?)。将从每个报告中计算哈希值并将其插入到下一个备份中——因此,创建了一系列哈希值。如果服务会改变过去的某些东西,那么这条链中的哈希将不会收敛。当然,我会创建开源工具来轻松比较数据之间的差异并检查链是否有效。

信任点:有一件事我很害怕。服务可以同时使用多个数据库并一次更新所有备份的所有哈希值(因为第一个备份没有前一个的哈希值)。因此,为了也涵盖这种情况,我考虑将哈希存储在某个服务根本无法更改的地方。例如,在来自官方服务钱包的现有区 block 链之一(btc、eth、...)中。或者,也许,DAG 和一些像 IOTA 这样的区 block 链?


  1. 您如何看待信任点?
  2. 我可以通过一些更简单的方式(没有区 block 链)实现我的目标吗?哪一个?
  3. 这个逻辑的瓶颈是什么?

最佳答案

这里有2个参与变量

  1. 创建记录的时间戳。
  2. 数据。

解决前提,

  1. 防篡改。
  2. 可以在同一个 GMT 日历日更改数据,而不会违反防篡改保证。 (创建后可改为固定窗口)
  3. RDBMS 作为数据存储,(可以更改为任何带有小模块的 NoSQL,但想法保持不变)。
  4. 不依赖于任何其他可能有问题或容易出错的机制。
  5. 单一查询验证。

## 建议的解决方案

创建数据表

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 表中反射(reflect)为签名。

第二步:更新数据

如果值发生变化并且是同一天,签名将得到更新。

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;

输出

|校验和 |签名 || ------ | ------ ||2bba70178abdafc5915ba0b5061597fa |2bba70178abdafc5915ba0b5061597fa

关于database - 为服务的最终用户提供伪造数据保护——工具?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55101428/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com