#分布式数据库 #不可变性 #异步 #数据库服务器 #服务器 #URL路径 #服务器-客户端

app atedb

基于强加密和身份验证的不可变数据存储构建的分布式数据链(数据库)

10 个稳定版本

1.8.0 2022年3月20日
1.6.0 2021年11月7日
1.5.0 2021年7月18日
1.4.0 2021年5月17日
1.3.1 2021年4月27日

#1849 in 异步

每月 25 次下载

MIT/ApacheLGPL-3.0

1MB
30K SLoC

ATE数据链

什么是ATE数据链?

ATE数据链(数据库)是ATE项目可以用于远程存储其重做日志的分布式重做日志服务器。ATE旨在连接到远程托管的状态库,以满足完整性和可用性非功能性需求。

什么是ATE?

请参见这里

摘要

ATE数据链运行一个服务器守护进程,该守护进程侦听来自客户端的连接,并充当分布式重做日志。

其他项目使用此后端进行持久化存储 - 例如

工作原理

  • AteDB将在本地文件系统上使用遵循连接客户端URL路径的命名约定存储其日志文件。
  • 日志文件在消费者连接、提供事件和断开连接时按需加载和更新
  • AteDB将监听TCP端口(默认:5000),除非指定其他协议,则同时支持IPv4和IPv6
  • 当客户端尝试访问不存在的链密钥时,AteDB将创建一个新的链和相关日志文件。
  • AteDB创建新链时,将查询身份验证服务器以获取谁有权将根事件写入链的公钥,基于命名约定。
    例如,ws://server.com/db/domain.com/name/mydb => mydb链,用户邮箱为 [email protected]
  • 如果您指定了--no-auth命令,则将创建没有进行任何身份验证检查的链,这意味着任何人都可以基于先来先服务的原则创建新链,不需要身份验证服务器。

默认情况下,所有线缆消息都是明文,但保密事件会被加密,从而在安全性和速度之间取得良好的平衡。然而,您也可以通过使用双重加密来提高数据链的安全性能。例如,如果您指定 --wire-encryption 128,则 AteDB 将使用量子抗性密钥交换来协商 AES 128 位对称密钥,支持完美前向安全性。

AteDB 可以运行两种模式,它们在信任和速度方面具有非常不同的特性。

集中式(默认)

表示一个 集中式 信任模型,意味着与中心服务器的通信链接本身成为可信对话。当服务器或客户端发送其事件时,它将只提供每个连接一次的所有权和写入授权的证明。这意味着写入将更快,因为它们只需为每个使用的密钥计算一次非对称签名。然而,这也意味着您正在信任服务器能够正确地执行其工作,并且没有被攻击者破坏,攻击者添加了自己的事件。

在集中式模式下运行时,强烈建议您使用线缆加密,以防止攻击者向您的通信渠道注入假事件。使用 --wire-encryption 参数来启用此功能。因此,AteDB 在集中式模式下默认使用 128 位线缆加密,可以使用 --no-wire-encryption 参数禁用。

分布式

表示 分布式 信任模型,其中客户端和服务器真正信任的是每个单独事件的签名。在服务器被破坏的情况下,攻击者无法将他们自己的事件注入链中,因为他们没有签名私钥的所有权。这种模式对写入操作有相当大的影响,因为它意味着事件需要在所有写入上计算非对称签名,批量尝试以最大限度地减少这种成本。然而,如果单独提交写入,则最坏的情况是每个 I/O 都等于一个签名。

在这种模式下,不需要运行线缆加密,因为所有需要保密性和完整性的事件都单独受到保护。然而,可以通过双重加密来减少侧信道攻击和拒绝服务风险。

在 '分布式' 模式下运行时,数据链不会进行身份验证服务器请求,因为这样做没有好处,也无法验证。所有完整性都作为事件本身的一部分提供。因此,在这种模式下,--auth 设置没有效果。

快速入门

# Installation and upgrade AteDB and auth-server
apt install cargo make pkg-config openssl libssl-dev
cargo install atedb
cargo install auth-server
# Launch AteDB with all the defaults which is a good balance of security, performance
# and simplfied setup. This instance will use the default authentication when it creates
# new chains setting the root write key to that of the owner. The authentication server
# that is queried will default to ws://tokera.sh/auth.
# The instance will listen on all ports and all network addresses.
atedb solo
# Starts a single instance datachain on the default port (5000) . This mode will use a
# distributed trust model which means it does not need an authentication server and will
# default to 128bit AES wire encryption
atedb --trust distributed solo
# Launch AteDB with the added protection of double-encryption with all communication to this
# server protected by 256bit AES encryption using quantum resistant key exchange. This mode
# of operation is the most secure but also the least performant.
atedb --wire-encryption 256 --trust distributed solo
# Load and store log files in a different path than the default of ~/ate
atedb solo ~/another-path/
# Starts AteDB without an authentication server which will listen on a localhost address for connections.
# Wire encryption is disabled even while this instance is running as a centralized trust mode as there
# is a low risk attackers could reach the loopback device.
atedb --no-auth --no-wire-encryption solo -l 127.0.0.1 -p 5555
# Starts AteDB using a different DNS server and authentication address that is hosted locally
# Also by specifying that we listen on address 0.0.0.0 we purposely limited ourselves to IPv4
auth-server run -l 0.0.0.0 -p 5555
atedb --dns 8.8.4.4 --auth ws://127.0.0.1:5555/auth solo -l 0.0.0.0
# Show log information of the running AteDB
RUST_LOG=info atedb solo

手册

USAGE:
    atedb [FLAGS] [OPTIONS] <SUBCOMMAND>

FLAGS:
    -d, --debug                 Logs debug info to the console
        --dns-sec               Determines if ATE will use DNSSec or just plain DNS
    -h, --help                  Prints help information
        --no-auth               Indicates no authentication server will be used meaning all new
                                chains created by clients allow anyone to write new root nodes
        --no-wire-encryption    Disbles wire encryption which would otherwise be turned on when
                                running in 'centralized' mode
    -v, --verbose               Sets the level of log verbosity, can be used multiple times
    -V, --version               Prints version information

OPTIONS:
    -a, --auth <auth>
            URL where the user is authenticated [default: ws://tokera.sh/auth]

        --dns-server <dns-server>
            Address that DNS queries will be sent to [default: 8.8.8.8]

    -t, --trust <trust>
            Trust mode that the datachain server will run under - valid values are either
            'distributed' or 'centralized'. When running in 'distributed' mode the server itself
            does not need to be trusted in order to trust the data it holds however it has a
            significant performance impact on write operations while the 'centralized' mode gives
            much higher performance but the server needs to be protected [default: centralized]

        --wire-encryption <wire-encryption>
            Indicates if ATE will use quantum resistant wire encryption (possible values are 128,
            192, 256). When running in 'centralized' mode wire encryption will default to 128bit
            however when running in 'distributed' mode wire encryption will default to off unless
            explicitly turned on


SUBCOMMANDS:
    help    Prints this message or the help of the given subcommand(s)
    solo    Runs a solo ATE datachain and listens for connections from clients

--------------------------------------------------------------------------

Runs a solo ATE datachain and listens for connections from clients

USAGE:
    atedb solo [OPTIONS] [logs-path]

ARGS:
    <logs-path>    Path to the log files where all the file system data is stored [default:
                   /opt/ate]

FLAGS:
    -h, --help       Prints help information
    -V, --version    Prints version information

OPTIONS:
        --compact-mode <compact-mode>
            Mode that the compaction will run under (valid modes are 'never', 'modified', 'timer',
            'factor', 'size', 'factor-or-timer', 'size-or-timer') [default: growth-or-timer]

        --compact-threshold-factor <compact-threshold-factor>
            Factor growth in the log file which will trigger compaction - this
            argument is ignored if you select a compact_mode that has no growth trigger [default:
            0.4]

        --compact-threshold-size <compact-threshold-size>
            Size of growth in bytes in the log file which will trigger compaction (default: 100MB) -
            this argument is ignored if you select a compact_mode that has no growth trigger
            [default: 104857600]

        --compact-timer <compact-timer>
            Time in seconds between compactions of the log file (default: 1 hour) - this argument is
            ignored if you select a compact_mode that has no timer [default: 3600]

    -l, --listen <listen>
            IP address that the datachain server will isten on [default: 0.0.0.0]

    -p, --port <port>
            Port that the datachain server will listen on [default: 5000]


贡献

如果您想帮助建立一个社区以继续开发此项目,请通过 [email protected] 联系我。

依赖关系

~121MB
~2.5M SLoC