fdb区块链
1. 比特币如何防止篡改
比特币网络主要会通过以下两种技术保证用户签发的交易和历史上发生的交易不会被攻击者篡改:
非对称加密可以保证攻击者无法伪造账户所有者的签名;
共识算法可以保证网络中的历史交易不会被攻击者替换;
- 非对称加密算法3是目前广泛应用的加密技术,TLS 证书和电子签名等场景都使用了非对称的加密算法保证安全。非对称加密算法同时包含一个公钥(Public Key)和一个私钥(Secret Key),使用私钥加密的数据只能用公钥解密,而使用公钥解密的数据也只能用私钥解密。
- 1使用如下所示的代码可以计算在无限长的时间中,攻击者持有 51% 算力时,改写历史 0 ~ 9 个区块的概率9:
- #include
- #include
- double attackerSuccessProbability(double q, int z) {
- double p = 1.0 - q;
- double lambda = z * (q / p);
- double sum = 1.0;
- int i, k;
- for (k = 0; k <= z; k++) {
- double poisson = exp(-lambda);
- for (i = 1; i <= k; i++)
- poisson *= lambda / i;
- sum -= poisson * (1 - pow(q / p, z - k));
- }
- return sum;
- }
- int main() {
- for (int i = 0; i < 10; i++) {
- printf("z=%d, p=%f\n", i, attackerSuccessProbability(0.51, i));
- }
- return 0;
- }
- 通过上述的计算我们会发现,在无限长的时间中,占有全网算力的节点能够发起 51% 攻击修改历史的概率是 100%;但是在有限长的时间中,因为比特币中的算力是相对动态的,比特币网络的节点也在避免出现单节点占有 51% 以上算力的情况,所以想要篡改比特币的历史还是比较困难的,不过在一些小众的、算力没有保证的一些区块链网络中,51% 攻击还是极其常见的10。
- 防范 51% 攻击方法也很简单,在多数的区块链网络中,刚刚加入区块链网络中的交易都是未确认的,只要这些区块后面追加了数量足够的区块,区块中的交易才会被确认。比特币中的交易确认数就是 6 个,而比特币平均 10 分钟生成一个块,所以一次交易的确认时间大概为 60 分钟,这也是为了保证安全性不得不做出的牺牲。不过,这种增加确认数的做法也不能保证 100% 的安全,我们也只能在不影响用户体验的情况下,尽可能增加攻击者的成本。
- 研究比特币这样的区块链技术还是非常有趣的,作为一个分布式的数据库,它也会遇到分布式系统经常会遇到的问题,例如节点不可靠等问题;同时作为一个金融系统和账本,它也会面对更加复杂的交易确认和验证场景。比特币网络的设计非常有趣,它是技术和金融两个交叉领域结合后的产物,非常值得我们花时间研究背后的原理。
- 比特币并不能 100% 防止交易和数据的篡改,文中提到的两种技术都只能从一定概率上保证安全,而降低攻击者成功的可能性也是安全领域需要面对的永恒问题。我们可以换一个更严谨的方式阐述今天的问题 — 比特币使用了哪些技术来增加攻击者的成本、降低交易被篡改的概率:
比特币使用了非对称加密算法,保证攻击者在有限时间内无法伪造账户所有者的签名;
比特币使用了工作量证明的共识算法并引入了记账的激励,保证网络中的历史交易不会被攻击者快速替换;
- 通过上述的两种方式,比特币才能保证历史的交易不会被篡改和所有账户中资金的安全。
非对称加密
图 4 - 51% 攻击
总结
2. Tbtcoin如何设置节点呢
租凭一个服务器 服务器租凭网站:my.vultr.com 选择10美金一月的服务器即可 使用以下说明在Ubuntu Server 18.04masternode。服务器 确保您具有以下要求。- 设置主节点所需的硬币数量。 - 存放硬币的钱包。 - 服务器或VPS。 说明分为三个部分。 设置控制钱包(1/2) 打开你的钱包,等到钱包下载了完整的区块链。 转到“工具”。 单击“调试控制台”。 这是您将执行所有命令的控制台。 创建一个masternode私钥。 masternode genkey 示例输出 显示您的抵押品地址。 getaccountaddress "MN1" 示例输出 记下masternode私钥和附属地址。 设置VPS 在VPS上安装Ubuntu Server 18.04。 更新你的Ubuntu机器。 sudo apt-get update sudo apt-get upgrade 安装所需的依赖项。 sudo apt-get install build-essential libtool autotools-dev automake pkg-config libssl-dev libevent-dev bsdmainutils python3 libboost-system-dev libboost-filesystem-dev libboost-chrono-dev libboost-test-dev libboost-thread-dev libboost-all-dev libboost-program-options-dev sudo apt-get install libminiupnpc-dev libzmq3-dev libprotobuf-dev protobuf-compiler unzip software-properties-common 安装Berkeley DB。sudo add-apt-repository ppa:bitcoin/bitcoin sudo apt-get update sudo apt-get install libdb4.8-dev libdb4.8++-dev 。从官方网站下载守护进程和工具。 提取tar文件。 tar -xzvf tbtcoin-daemon-linux.tar.gz tar -xzvf tbtcoin-qt-linux.tar.gz 安装守护程序和工具。 sudo mv tbtcoinnd tbtcoin-cli tbtcoin-tx /usr/bin/ 创建配置文件。 mkdir $HOME/.tbtcoin cd $HOME cd tbtcoin.conf Touch tbtcoin.conf Vi tbtcoin.conf 在examplecoin.conf中粘贴以下行。#---- rpcuser=rpc_tbtcoin rpcpassword= rpcallowip=127.0.0.1 #---- listen=1 server=1 daemon=1 maxconnections=64 #---- masternode=1 masternodeprivkey=REPLACE_WITH_MASTERNODE_PRIVATE_KEY externalip=REPLACE_WITH_EXTERNAL_IP_OF_VPS #---- 将文本“REPLACE_WITH_MASTERNODE_PRIVATE_KEY”替换为使用命令 “masternode genkey”创建的“masternode私钥”。 例如 masternodeprivkey= dtnro2Wo将文本“REPLACE_WITH_EXTERNAL_IP_OF_VPS”替换为VPS的外部IP地址。 例如externalip=136.144.171.201 使用以下命令启动节点。 examplecoind 设置控制钱包(2/2) 使用命令“getaccountaddress”MN1“”将所需数量的硬币转移到您创建的“附属地 址”。 等到事务具有所需的masternode确认。 转到工具。 单击调试控制台。 输入以下命令。 masternode outputs 示例输出 [ {"" : "0", } ] 转到“工具”。 单击“打开Masternode配置文件”。 修改以下行并将其粘贴到记事本中。 MN1 136.144.171.201:9999 0 MN1 - 您的masternode的别名。 136.144.171.201 - 您的VPS的外部IP。 9999 - 更换硬币的P2P端口。 - 来自命 令“masternode genkey”的Masternode私钥。 - 来自命令“masternode outputs”的事务哈希。0 - 命令“masternode outputs”中的单个数字。 保存文件并关闭记事本。 关闭钱包并重新打开钱包。 前往设置”。 点击“解锁钱包”。 输入您的钱包密码并解锁您的钱包。 转到“工具”。 单击“调试控制台”。 使用该命令启动masternode。 masternode start-alias MN1 激活你的masternode需要+/- 30分钟
3. tbtcoin如何搭建主节点
租凭一个服务器 服务器租凭网站:my.vultr.com 选择10美金一月的服务器即可 使用以下说明在Ubuntu Server 18.04masternode。服务器 确保您具有以下要求。- 设置主节点所需的硬币数量。 - 存放硬币的钱包。 - 服务器或VPS。 说明分为三个部分。 设置控制钱包(1/2) 打开你的钱包,等到钱包下载了完整的区块链。 转到“工具”。 单击“调试控制台”。 这是您将执行所有命令的控制台。 创建一个masternode私钥。 masternode genkey 示例输出 显示您的抵押品地址。 getaccountaddress "MN1" 示例输出 记下masternode私钥和附属地址。 设置VPS 在VPS上安装Ubuntu Server 18.04。 更新你的Ubuntu机器。 sudo apt-get update sudo apt-get upgrade 安装所需的依赖项。 sudo apt-get install build-essential libtool autotools-dev automake pkg-config libssl-dev libevent-dev bsdmainutils python3 libboost-system-dev libboost-filesystem-dev libboost-chrono-dev libboost-test-dev libboost-thread-dev libboost-all-dev libboost-program-options-dev sudo apt-get install libminiupnpc-dev libzmq3-dev libprotobuf-dev protobuf-compiler unzip software-properties-common 安装Berkeley DB。sudo add-apt-repository ppa:bitcoin/bitcoin sudo apt-get update sudo apt-get install libdb4.8-dev libdb4.8++-dev 。从官方网站下载守护进程和工具。 提取tar文件。 tar -xzvf tbtcoin-daemon-linux.tar.gz tar -xzvf tbtcoin-qt-linux.tar.gz 安装守护程序和工具。 sudo mv tbtcoinnd tbtcoin-cli tbtcoin-tx /usr/bin/ 创建配置文件。 mkdir $HOME/.tbtcoin cd $HOME cd tbtcoin.conf Touch tbtcoin.conf Vi tbtcoin.conf 在examplecoin.conf中粘贴以下行。#---- rpcuser=rpc_tbtcoin rpcpassword= rpcallowip=127.0.0.1 #---- listen=1 server=1 daemon=1 maxconnections=64 #---- masternode=1 masternodeprivkey=REPLACE_WITH_MASTERNODE_PRIVATE_KEY externalip=REPLACE_WITH_EXTERNAL_IP_OF_VPS #---- 将文本“REPLACE_WITH_MASTERNODE_PRIVATE_KEY”替换为使用命令 “masternode genkey”创建的“masternode私钥”。 例如 masternodeprivkey= dtnro2Wo将文本“REPLACE_WITH_EXTERNAL_IP_OF_VPS”替换为VPS的外部IP地址。 例如externalip=136.144.171.201 使用以下命令启动节点。 examplecoind 设置控制钱包(2/2) 使用命令“getaccountaddress”MN1“”将所需数量的硬币转移到您创建的“附属地 址”。 等到事务具有所需的masternode确认。 转到工具。 单击调试控制台。 输入以下命令。 masternode outputs 示例输出 [ {"" : "0", } ] 转到“工具”。 单击“打开Masternode配置文件”。 修改以下行并将其粘贴到记事本中。 MN1 136.144.171.201:9999 0 MN1 - 您的masternode的别名。 136.144.171.201 - 您的VPS的外部IP。 9999 - 更换硬币的P2P端口。 - 来自命 令“masternode genkey”的Masternode私钥。 - 来自命令“masternode outputs”的事务哈希。0 - 命令“masternode outputs”中的单个数字。 保存文件并关闭记事本。 关闭钱包并重新打开钱包。 前往设置”。 点击“解锁钱包”。 输入您的钱包密码并解锁您的钱包。 转到“工具”。 单击“调试控制台”。 使用该命令启动masternode。 masternode start-alias MN1 激活你的masternode需要+/- 30分钟