TiKV 使用 encryption at rest 之后,文件是不是仍旧无法防篡改?

aes-ctr 加密是无法保证我们文件不会被篡改或者篡改之后被发现的。。。
TiKV有防止文件被篡改的策略吗?

1 个赞

RocksDB 的 SST 会有 CRC 校验

TiKV的aes-ctr加密属于存储加密,存储加密的目的是防止潜在的攻击者获取物理存储设备后直接读取数据。
对于防篡改,要修改TiKV的数据,就必须经过权限控制逻辑,获得写权限,才能修改TiKV的数据;所以这个地方的防篡改是通过权限控制实现。
对于数据被篡改后如何发现,这就是审计功能需要保证的,通过数据库审计保证对数据被修改的可追溯。

3 个赞

数据防篡改技术是数字签名(通过客户端或服务端的私钥来签名,用对端的公钥签签名)

为防止数据库文件和数据库记录被恶意篡改,需要结合具体场景:

1 数据库文件防篡改主要是数据库客户端和服务端需要启用双向TLS,目前您需要为 TiKV Client 设置 TLS 才能连接到 TiKV。
例如:通过Rust Client,设置TLS(目前 TiKV Java Client 不支持 TLS) ,并 将连接 URL 更改为 https://,具体配置如下:

let config = Config::new(/* ... */).with_security(
    // The path to the file that contains the PEM encoding of the server’s CA certificates.
    "/path/to/ca.pem",
    // The path to the file that contains the PEM encoding of the server’s certificate chain.
    "/path/to/client-cert.pem",
    // The path to the file that contains the PEM encoding of the server’s private key.
    "/path/to/client-key.pem"
);

配置 TiKV 服务器证书,具体如下:

# Using empty strings here means disabling secure connections.
[security]
# The path to the file that contains the PEM encoding of the server’s CA certificates.
ca-path = "/path/to/ca.pem"
# The path to the file that contains the PEM encoding of the server’s certificate chain.
cert-path = "/path/to/tikv-server-cert.pem"
# The path to the file that contains the PEM encoding of the server’s private key.
key-path = "/path/to/tikv-server-key.pem"
# The name list used to verify the common name in client’s certificates. Verification is
# not enabled if this field is empty.
cert-allowed-cn = ["tikv-server", "pd-server"]

这样配置完成后,能够实现客户端和服务端的双向身份认证,对于客户端传输的数据进行数字签名。

2 数据库中记录防篡改可以通过为应用程序APP发客户端证书实现双向签名认证。例如:需要您的应用程序中调用证书API或者您的根证书CA开放的API、Encrypt SDK,在建立客户端与服务端双向安全通信的基础上,调研对称密钥(CTR 模式下使用 AES128、AES192 或 AES256 加密数据,也支持您使用自定义密钥)实现对程序中请求和字段进行加密。

要启用加密,您可以参考[TiKV 的配置文件中添加加密部分],(https://docs.pingcap.com/tidb/stable/encryption-at-rest)

提示: 通过K8S管理TIKV集群中的 TLS 证书,可以通过 certificates.k8s.io这个API实现证书的请求,也可以 使用多种工具来生成自签名的证书,如 [openssl](https://www.openssl.org/source/)easy-rsa[cfssl](https://github.com/cloudflare/cfssl/releases) 。也可以参考 * 在 TiDB 客户端和服务器之间启用 TLS配置TiDB 客户端和服务器之间双向认证。生成自签名证书请参考docs/generate-self-signed-certificates.md at release-5.2 · pingcap/docs · GitHub

对于监控加密配置:
您可以使用 Grafana 部署 TiKV,您可以查看 TiKV-Details 仪表板中的 加密 面板,具体参考https://docs.pingcap.com/tidb/stable/encryption-at-rest#configure-encryption,当然您也可以根据部署环境,是在传统数据中心还是云上选择自己现有的审计设备和审计服务。

如果需要实现对用于加密数据密钥的CMK主密钥,以及对私钥的权限细粒度控制与保护,需要结合具体应用部署架构,进行详细设计,在云上您可以更细粒度通过VPC Policy,EndPoint policy和Key Policy 还有用户和ROLE实现细粒度访问控制。对于数据中心,基本都是把根密钥放在机房的加密机和硬件U盘中保存,而且可以选择审计U盘,来实现从客户端到服务端的审计。具体内容不在细说。

2 个赞

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。