您当前的位置:首页 >> 装修攻略

Restic建筑设计原理

2025-05-28 12:27:31

1d452458089985043a5│ ├── 59│ │ └── 59fe4bcde59bd6222eba87795e35a90d82cd2f138a27b6835032b7b58173a426│ ├── 73│ │ └── 73d04e6125cf3c28a299cc2f3cca3b78ceac396e4fcf9575e34536b26782413c│ [...]├── index│ ├── c38f5fb68307c6a3e3aa945d556e325dc38f5fb68307c6a3e3aa945d556e325d│ └── ca171b1b7394d90d330b265d90f506f9984043b342525f019788f97e745c71fd├── keys│ └── b02de829beeb3c01a63e6b25cbd421a98fef144f03b9a02e46eff9e2ca3f0bd7├── locks├── snapshots│ └── 22a5af1bdc6e616f8a295794589627e01b32210d09adb288d1ecda7c5711ec└── tmp

闪存库可以用到restic init指令子流程,例如:

$ restic -r /tmp/restic-repo init包在(Pack)JPEG

除 Key 和 Pack 份文件外,闪存库中都会的所有份文件仅还包在括原始表单,闪存为IV || 字串 || MAC。 包在份文件显然还包在括一个或多个 Blob 表单。

一个包在的构件如下:

EncryptedBlob1 || ... || EncryptedBlobN || Encryptedheader || Header_Length

Pack 份文件的末尾是header,它说明了了内容可。header经过加密算法和身份检验。 Header_Length 是加密算法头的尺寸,用到四元组乘法little-endian元组。将header摆放在份文件末尾,用意是为了在启动时处理过程中都会,启动时blob后立即将他们只读连续的流中都会。这降低了代码的log,并且避免了在包在完转成后,在推断内容可和header尺寸后减法只读份文件的问题。

所有 blob(EncryptedBlob1、于大EncryptedBlobN 等)都经过独立鉴权和加密算法。闪存库可以在必需档案Blob情况下,透过合并。此外,还可以透过高效的录入,因为只须要启动时header,找造出Pack中都会还包在括哪些Blob。因为header是经过鉴权的,因此可以人身安全检查header的恰当性,而必需启动时非常简单的Pack。

档案后,Pack 的躯干由表列元素都是由:

Type_Blob1 ||Length(EncryptedBlob1) ||Hash(Plaintext_Blob1) ||[...]Type_BlobN ||Length(EncryptedBlobN) ||Hash(Plaintext_Blobn) ||

这足以推算Pack中都会所有 Blob 的绝对值。 尺寸是 Blob 的尺寸,它是 little-endian JPEG的四元组乘法。 Type codice_是一个单元组codice_,根据下表标记 blob 的内容可:

Type

Meaning

0

data

1

tree

所有其他一般来说均无效,预见显然掺入更多一般来说。

为了重建录入或求解很难录入的Pack,首先需要启动时先前四个元组才能找到header的尺寸。 之后,可以启动时和求解header,这都会产生所有已还包在括的 blob 的严格来说加密算法算法、一般来说、绝对值和尺寸。

录入(indexing)

录入份文件还包在括有关表单和树根Blob树根及其所在Pack的的资讯,并将此的资讯闪存在闪存库中都会。 当本地线程录入不再可用时,可以浏览录入份文件并重建录入。 这些份文件像表单和Blob树根同样经过加密算法和鉴权,因此内部构件仍然是 IV || 字串 || Mac。 严格来说由如下 JSON 文件JPEG都是由:

{ "supersedes": [ "ed54ae36197f4745ebb54d10e0f623eaaaedd03013eb7ae90df881b7781452" ], "packs": [ { "id": "73d04e6125cf3c28a299cc2f3cca3b78ceac396e4fcf9575e34536b26782413c", "blobs": [ { "id": "3ec79977ef0cf5de7b08cd12b874cd0f62bbaf7f07f3497a5b1bbcc8cb39b1ce", "type": "data", "offset": 0, "length": 25 },{ "id": "9ccb846e60d90d4eb915848add7aa7ea1e4bbabfc60e573db9f7bfb2789afbae", "type": "tree", "offset": 38, "length": 100 }, { "id": "d3dc577b4ffd38cb32122cabf8655a0223ed22edfd93b353dc0c3f2b0fdf66", "type": "data", "offset": 150, "length": 123 } ] }, [...] ]}

此 JSON 文件JPEG详见了Packs和其中都会还包在括的 blob。 在此比如说中都会,Pack 73d04e61 还包在括两个表单 Blob 和一个 Blob树根,严格来说加密算法算法随后详见。

codice_ supersedes 详见了已被当前录入份文件替换的录入份文件的闪存 ID。 这时有发生在重取而代之一并在录入份文件时,例如移除原本视图并重取而代之第一组包在时。

显然有给定数量的录入份文件,其中都会还包在括关于不直线的Pack集合的的资讯。 选择在理论上上份文件中都会说明了的Packs数量,让份信息量保持在8MiB一下。

字串(Keys),加密算法和MAC

所有完好无损restic闪存库中都会的表单用到定时手段在AES-256加密算法,鉴权用到Poly1305-AES。为了加密算法取而代之表单,从密码学人身安全的伪乱数生转成器中都会启动时前 16 个元组作为随机乱数。这既用途定时手段在的 IV,也用途 Poly1305 的乱数。该可用须要三个字串:应用于加密算法的 AES-256 的 32 元组、应用于 Poly1305 的 16 元组的 AES 字串和 16 元组的字串。有关详细的资讯,请参阅 Dan Bernstein 的原始期刊 The Poly1305-AES 最新消息身份检验代码。然后用到 AES-256 对表单透过加密算法,然后在字串上推算最新消息检验码 (MAC),然后将所有内容可闪存为 IV || 字串 || MAC。

编目 keys 还包在括字串份文件。这些是简单的 JSON JPEG文件JPEG,还包在括从Gmail密码学是从闪存库的主加密算法和最新消息身份检验字串所需的所有表单。例如,可以用到 python 模组 json(缩短以提高可读性)来优化打印闪存库中都会的 JSON 文件JPEG:

$ python -mjson.tool /tmp/restic-repo/keys/b02de82*{ "hostname": "kasimir", "username": "fd0" "kdf": "scrypt", "N": 65536, "r": 8, "p": 1, "created": "2015-01-02T18:10:13.48307196+01:00", "data": "tGwYeKoM0C4j4/9DFrVEmMGAldvEn/+iKC3te/QE/6ox/V4qz58FUOgMa0Bb1cIJ6asrypCx/Ti/pRXCPHLDkIJbNYd2ybC+fLhFIJVLCvkMS+trdywsUkglUbTbi+7+Ldsul5jpAj9vTZ25ajDc+4FKtWEcCWL5ICAOoTAxnPgT+Lh8ByGQBH6KbdWabqamLzTRWxePFoYuxa7yXgmj9A==", "salt": "uW4fEI1+IOzj7ED9mVor+yTSJFd68DGlGOeLgJELYsTU5ikhG/83/+jGd4KKAaQdSrsfzrdOhAMftTSih5Ux6w==",}

当锁上restic闪存库时,都会提醒Gmail重定向闪存库密码学。然后将其与 scrypt、字串是从函数 (KDF) 和提供者的参数(N、r、p 和salt)四人是从 64 个字串元组。前 32 个元组应用于加密算法字串(应用于 AES-256),先前 32 个元组用途最新消息检验字串(应用于 Poly1305-AES)。这先前 32 个元组被分转成一个 16 元组的 AES 字串“k”,然后是 16 个元组的字串“r”。然后将字串r 封禁,与 Poly1305 四人用到(有关详细的资讯,请参阅期刊)。

这些最新消息身份检验字串(k 和 r)应用于推算MAC,用到 JSON 中都会 datacodice_还包在括的元组(在移除 Base64 元组并且不包在括先前 32 个元组之后)。如果密码学不恰当或字串份文件被涂改,则推算造出的 MAC 将与表单的先前 16 个元组不意味着,restic 都会报错退造出。否则,将用到从 scrypt 是从的加密算法字串件JPEG案表单。这将生转成一个 JSON ,其中都会还包在括此闪存库的主加密算法和最新消息鉴权字串(以 Base64 元组)。 restic cat masterkey 指令可应用于档案和预处理打印主字串:

$ restic -r /tmp/restic-repo cat masterkey{ "mac": { "k": "evFWd9wWlndL9jc501268g==", "r": "E9eEDnSJZgqwTOkDtOp+Dw==" }, "encrypt": "UQCqa0lKZ94PygPxMRqkePTZnHRYh1k1pX2k2lM2v3Q=",}

闪存库中都会的所有表单都用到这些主字串透过加密算法和检验。 对于加密算法,用到定时手段在下的 AES-256 算法。 对于最新消息认证,如上所述用到 Poly1305-AES。

闪存库可以有多个不同的密码学,每个密码学都有一个字串份文件。 这样,必需重取而代之加密算法所有表单即可更改密码学。

视图(Snapshots)

视图坚称在特定时长点还包在括所有份文件和子编用意编目。 对于所做的每个启动时,才都会创始人一个取而代之视图。 视图用到JSON份文件说明了,闪存在闪存库中都会“snapshots”编目下的加密算法份文件。 份codice_是闪存 ID。 此字符串是唯一的,并在 restic 中都会应用于唯一标签视图。

restic cat snapshot 指令可应用于档案和预处理打印视图份文件的内容可:

$ restic -r /tmp/restic-repo cat snapshot 22a5af1benter passwordfor repository:{ "time": "2015-01-02T18:10:50.895208559+01:00", "tree": "2da81727b6585232894cfbb8f8bdab8d1eccd3d8f7c92bc934d62e62e618ffdf", "dir": "/tmp/testdata", "hostname": "kasimir", "username": "fd0", "uid": 1000, "gid": 100}

在这里可以看造出,这个视图代表人了编目/tmp/testdata的内容可。 极为重要的codice_是tree。

restic 闪存库中都会的所有内容可都根据其 SHA-256 加密算法算法取值透过指称。 在复原在此之前,每个份文件都被重叠转成如前所述大小的表单块。 所有 Blob 的 SHA-256 加密算法算法取值都复原在有序一览表中都会,代表人份文件的内容可。

为了将这些严格来说加密算法算法与 Pack 份文件中都会的理论上后方相关联,用到了录入。 如果录入不应用,则可以启动时所有表单 Blob 的header。

树根(Tree)和表单(Data)

视图通过JSON中都会SHA-256加密算法算法指称树根,代表人其内容可树根和表单复原在编目“data”的子编目中都会的Pack份文件中都会。

指令 restic cat tree 可应用于人身安全检查上面指称的树根:

$ restic -r /tmp/restic-repo cat tree b8138ab08a4722596ac89c917827358da4672eac68e3c03a8115b88dbf4bfb59enter passwordfor repository:{ "nodes": [ { "name": "testdata", "type": "dir", "mode": 493, "mtime": "2014-12-22T14:47:59.912418701+01:00", "atime": "2014-12-06T17:49:21.748468803+01:00", "ctime": "2014-12-22T14:47:59.912418701+01:00", "uid": 1000, "gid": 100, "user": "fd0", "inode": 409704562, "content": null, "subtree": "b26e315b0988ddcd1cee64c351d13a100fedbc9fdbb144a67d1b765ab280b4dc" } ]}

树根包在还包在括一组端口(在“node”codice_中都会),其中都会还包在括地名和时长得用等元表单。 当端口相反编目时,codice_“subtree”还包在括另一个树根单纯的ID。

当用到指令“restic cat tree”时,须要闪存加密算法算法来显示树根。 上面指称的树根可以展开驱动为:

$ restic -r /tmp/restic-repo cat tree 8b238c8811cc362693e91a857460c78d3acf7d9edb2f111048691976803cf16eenter passwordfor repository:{ "nodes": [ { "name": "testfile", "type": "file", "mode": 420, "mtime": "2014-12-06T17:50:23.34513538+01:00", "atime": "2014-12-06T17:50:23.338468713+01:00", "ctime": "2014-12-06T17:50:23.34513538+01:00", "uid": 1000, "gid": 100, "user": "fd0", "inode": 416863351, "size": 1234, "links": 1, "content": [ "50f77b3b4291e8411a027b9f9b9e64658181cc676ce6ba9958b95f268cb1109d" ] }, [...] ]}

该树根还包在括一个份文件。 这一次,subtree codice_不存在,content codice_还包在括一个 SHA-256 加密算法算法的一览表。

指令 restic cat data 可应用于提取和档案指定严格来说 ID 的表单,例如 对于上述表单:

$ restic -r /tmp/restic-repo cat blob 50f77b3b4291e8411a027b9f9b9e64658181cc676ce6ba9958b95f268cb1109d | sha256sumenter passwordfor repository:50f77b3b4291e8411a027b9f9b9e64658181cc676ce6ba9958b95f268cb1109d -

从 sha256sum 的驱动可以看造出,加密算法算法与上面树根中都会还包在括的拓扑的严格来说加密算法算法意味着,因此返回了恰当的表单。

扣(Locks)

restic 闪存库其设计手段是允许并发回访,甚至立体化只读。 但是,有些功用工作效率要求更高,甚至须要对闪存库透过实质上回访。 为了借助于这些功用,须要restic当前在分派任何可用在此之前,在闪存库上创始人一个扣。

扣有两种一般来说:排他扣和非排他扣。 一个当前最多可以在闪存库上包在括一个实质上扣,并且此前不得有任何其他扣(实质上和非实质上)。 对于排它扣,显然立体化存在多个。

扣是子编目locks中都会的份文件,其份codice_是内容可的闪存ID。 它的加密算法和鉴权手段与闪存库中都会的其他份文件有所不同,并还包在括表列 JSON 构件:

{ "time": "2015-06-27T12:18:51.759239612+02:00", "exclusive": false, "hostname": "kasimir", "username": "fd0", "pid": 13607, "uid": 1000, "gid": 100}

codice_ exclusive 并不一定了扣的一般来说。 当要创始人取而代之扣时,restic 都会人身安全检查闪存库中都会的所有扣。 找到扣时,都会测试扣是否是违反规定,默认时长为成比例30分钟以上。 如果扣是在同一台机器上创始人的,即使对于很难大幅提高违反规定时长的扣,它也都会通过向它发送信号来测试当前是否是还活着。 如果收场,restic 举例来说当前已死,并认为扣是多余的。

当要创始人一个取而代之扣并且很难检测到与其他矛盾扣时,restic 创始人一个取而代之扣,等待并人身安全检查闪存库中都会是否是造出现其他扣。 根据其他扣的一般来说和要创始人的扣,restic 要么此后,要么收场。

启动时和减法表单移除

为了创始人启动时,restic 都会扫描源编目中都会的所有份文件、子编目和其他条目。 来自每个份文件的表单被分立为如前所述尺寸的 Blob,这些 Blob 以 64 元组的滑动窗口并不一定的绝对值透过小块。 该借助于用到 Rabin 指纹来借助于内容可并不一定举例来说 (Content Defined Chunking, CDC)。 子流程闪存库时,随机选择一个不应约多项式(不应约多项式,顾名思义即不能写转成两个数较低的多项式之乘积的多项式)并复原在份文件 config 中都会,增加相容性,让印刷品炮轰更为不方便。

小于 512 KiB 的份文件不都会被分立,Blob 的大小为 512 KiB 到 8 MiB。 借助于的最终目标是Blob千分之 1 MiB 大小。

对于改写过的份文件,只有改写过的 Blob 需要复原在后续启动时中都会。 即使在份文件中都会的给定后方插入或移除元组,仍然可以此后工作。

冲击模型

restic 的其设计最终目标是能够将启动时人身安全地闪存在不完全备受委以重任的后方,例如资源共享的系统,其他人可以在其中都会回访份文件(在启动时的情况下)甚至改写或移除它们。

一般结论:

创始人启动时的DS的系统是备受委以重任的。这是最理论上的要求,对于创始人可靠的启动时至关重要。Gmail用到的是正版resticGmail不与身份检验资源共享闪存库密码学。restic 启动时流程并非是其设计防止身份检验移除闪存后方的份文件。对此徒劳无功。如果须要保证这一点,一定要选择很难第三方可以回访的人身安全后方如果字串披露,整个闪存库将重取而代之加密算法。用到当前的字串管理其设计,如果不重取而代之加密算法整个闪存库,就不显然人身安全地撤销披露的字串。针对 restic 用到的加密算法内联(即 AES-256-CTR-Poly1305-AES 和 SHA-256),唯难以借助于炮轰。如果能够借助于,都会使 restic 提供者的机密性或非常简单性必要措施似乎多余。算力之外飞跃还难以借助于对 restic 加密算法必要措施的暴力炮轰

restic 启动时流程可以保证表列内容可:

如果很难闪存库的密码学,就难以回访闪存份文件和元表单的不曾加密算法内容可。字串份文件中都会除了应用于的资讯说明了用意的元表单之外的所有内容可都经过加密算法和鉴权的。线程中都会的内容可也透过了加密算法,防止metadata披露对于闪存在闪存库中都会的所有表单的修补(坏 RAM、损坏的硬盘)可以被检测到被涂改的表单将难以档案

考虑到上述结论和保证,表列是各种的炮轰手段:

对启动时闪存后方兼具启动时职责的对手可以:

尝试对闪存库副本透过暴力密码学猜测炮轰(推荐用到 30 个以上字符的长密码学)。通过份文件回访手段在相符合哪些包在显然还包在括树根。通过用到闪存库单纯的创始人时长得用相符合启动时的大小。

兼具网络回访职责的对手可以:

尝试 DoS 闪存启动时闪存库的服务器或Gmail端和服务器之间的网络连接。断定您创始人启动时的后方(即劝告的来源后方)。断定您闪存启动时的后方(即,哪个提供者流程/最终目标的系统)。通过用到闪存库单纯的创始人时长得用相符合启动时的大小。

表列是与违反上述某些结论后产生直接影响的比如说。

破坏DS的系统透过启动时(通过恶意软件、物理回访等):

使整个启动时处理过程似乎不应信(例如,拦阻密码学、复制份文件、操纵表单)。创始人覆盖所有改写份文件的视图(还包在括焚化炉表单),并等到备受委以重任的DS被盗所有恰当的视图。为每个时长得用稍稍有不同的视图创始人一个焚化炉视图,等到知道列车运行后,除此以外移除所有恰当视图

在闪存后方对您的份文件兼具写回访职责可以:

移除或可用您的启动时,从而削减您从备受损闪存后方恢复份文件的技能。断定哪些份文件属于哪个视图(例如,基于闪存份文件的时长得用)。 当仅移除这些份文件时,特定视图都会变为,并且依赖于视图中都会的表单将难以复元。Restic 并非其设计来检测这种炮轰。

破坏兼具对启动时闪存库附加回访职责的DS的系统可以:

DS发来炮轰后,使取而代之的启动时不应信(由于对取而代之启动时兼具完全支配权)。 身份检验难以移除或可用原本启动时。 因此,恢复在DS发动战争在此之前创始人的原本视图仍然是显然的。 注意:不建议对仅SP视图列车运行则都会知道,当这些DS显然备受到冲击时,因为用到欺骗视图的身份检验显然导致知道移除恰当的视图。*

包在括不曾重取而代之加密算法的闪存库的披露字串可以:

档案现有和预见的启动时表单。 如果多台DS启动时到同一个闪存库,身份检验将可以回访每台DS的启动时表单。。

不是干眼症能用海露吗
看病人拿什么
宝宝消化不良怎么办
手术后如何调理身体
上海哪家医院有干细胞疗法
喉咙痛该怎么办
黄褐斑怎么内调治疗最好
经常熬夜喝酒抽烟肝不好怎么办
拉肚子吃什么药管用
科兴制药
友情链接