
后端密码学【免费下载链接】upspinUpspin: A framework for naming everyones everything.项目地址https://gitcode.com/gh_mirrors/up/upspin点击查看免费下载Upspin 是一个开源实验性项目它既不是传统文件系统也不是某个云盘应用而是一套为所有人命名一切的框架通过一组协议与参考实现把分散在个人设备、家庭服务器与商业云服务中的数据统一进一个全球命名空间。本文以项目官方主页 doc/index.md 为主线结合仓库内源码与配套文档系统讲解 Upspin 的动机、命名模型、三大服务器架构、端到端加密、访问控制、配置文件与注册上手流程帮助你理解其设计并具备动手实践的基础。项目定位解决下载-上传时代的碎片化问题官方主页 doc/index.md 用四个直击痛点的问题开篇你是否曾为了上传到另一台设备而先下载一个文件你是否曾为了从某个 Web 服务传到另一个服务而先下载再上传你是否曾仅仅为了把文件分享给一个人就把它设成公开你是否曾不小心让某些内容被错误的人看到Upspin 正是对这些问题的回应。其配套的 Upspin 总览 进一步分析了根源随着信息从个人电脑迁移到网络服务器数据与使用者逐渐分离用户对数据失去了控制权。照片上传到社交平台后由平台托管数据是否可用取决于当前使用哪台设备分享手段要么是公开/私有的二选一要么依赖上传、下载、邮件附件这类临时机制同时服务提供商通常能直接看到信息本身。Upspin 的解决思路是如果每一个数据项都有唯一的名字并且每个人、每台服务器、每台 PC 或手机都能对该名字求值并访问对应数据再加上端到端安全与一致的分享模型那么下载/上传、未授权访问、数据孤岛乃至邮件附件都可能成为历史。正如 README.md 所述Upspin 是命名与安全分享文件及其他数据的框架统一性与安全性是首要目标性能不是。两个核心设计要素协议与参考实现doc/index.md 明确指出Upspin 由两大设计要素构成一组协议基于全局命名系统实现安全、联邦化的共享参考实现演示这些能力的一组工具与服务。换句话说Upspin 提供的是一层基础设施——其他软件和服务可以构建在这套接口、协议与组件之上以获得安全访问与分享能力。它不要求所有参与者使用同一个服务商而是一个联邦任何实现了标准接口的服务都能加入生态系统。从源码结构看这套协议的核心定义集中在 upspin/upspin.go其中声明了三大服务器接口KeyServer、DirServer、StoreServer以及面向应用的高层Client接口。注释明确写道任何实现了名为KeyServer、DirServer或StoreServer的服务器接口的服务都可以参与 Upspin 生态系统。仓库内对应的参考实现包括键服务器cmd/keyserver/main.go 与进程内实现 key/inprocess/key.go目录服务器cmd/dirserver/main.go 与 dir/server/server.go存储服务器cmd/storeserver/main.go 与 store/server/server.go目录与存储二合一服务器upspinserver见 cmd/upspinserver/main.go磁盘存储后端cloud/storage/disk/disk.go客户端库client/client.go。配合这一套组件的还有命令行工具upspin、FUSE 文件系统upspinfscmd/upspinfs、缓存服务器cacheservercmd/cacheserver以及存储审计工具upspin-auditcmd/upspin-audit。全局命名空间如何命名一切主页声称 Upspin 提供了一个全球命名空间global name space其命名模型在 upspin/upspin.go 和 Upspin 总览 中有完整定义。用户就是电子邮件地址在 Upspin 中用户用一个电子邮件地址来标识称为用户名User Name。注册时该地址用于验证身份之后仅作为标识符使用例如annexample.com。upspin/upspin.go 将其定义为独立类型UserName注释特意说明用户部分可以在加号后带一个可选后缀示例包括gophergoogle.com、meyouforever.com。全限定路径名每个 Upspin 文件名都有统一结构以用户名开头后接斜杠分隔的类 Unix 路径annexample.com/dir/file其中annexample.com是该文件的所有者owner而annexample.com/称为该用户的用户根user root类似于 Unix 的$HOME。Upspin没有本地路径名的概念——所有路径名都是全限定的永远以用户名开头。upspin/upspin.go 将PathName定义为独立类型示例即gophergoogle.com/burrow/hoard。带后缀的用户名一台设备一个身份某些邮箱服务允许在前用加号添加后缀。Upspin 用这一技巧让一个用户拥有多个 Upspin 服务身份例如anncameraexample.com可以是annexample.com名下的一台联网摄像头。后缀用户的属性属于其主用户无后缀的那个主用户可以在键服务器上修改带后缀名字的键与存储/目录端点反之则不行只能由所有者创建不需要真实可用的邮箱通过upspin命令创建$ upspin createsuffixeduser anntestingexample.com对应的子命令实现位于 cmd/upspin/createsuffixeduser.go。链接与动态内容Upspin 名字通常指向静态文件与目录但命名方案本身不保证内容类型——某些服务器可能提供动态内容。此外还存在链接link类似 Unix 符号链接一个树中的名字可以指向命名空间中任意位置的项目甚至指向其他用户的树从而让单个用户把感兴趣的全部名字组织进自己的树中。链接求值的最大跳数在 upspin/upspin.go 中限定为MaxLinkHops 20。系统架构键服务器、目录服务器与存储服务器Upspin 由三个核心部分构成每个都是一个提供简单 RPC 接口的网络服务器。官方架构页 doc/arch.md 给出了整体架构图三大服务器职责键服务器Key Server存放系统中所有用户的公钥不是私钥以及每个用户目录服务器的网络地址。全局生态中由运行在key.upspin.io的服务器提供服务。所有用户都可以在此保存公钥也可以查询其他任何用户的公钥。接口定义见 upspin/upspin.go 的KeyServerLookup与Put两个方法用户记录结构User包含Name、Dirs、Stores与PublicKey字段。存储服务器Store Server存放系统中的实际数据按引用reference而非名字存取默认实现中引用是由数据内容计算出的哈希。存储服务器接口StoreServerupspin/upspin.go只有Get、Put、Delete三个方法对数据不做任何解释。目录服务器Dir Server代表用户给存储服务器中的数据命名。目录服务器通常只承载单个用户或单个家庭的树存储与命名的分离意味着即使引用了大量大文件单个用户的目录结构也只是很小的数据量。以读取annexample.com/file为例Upspin 总览 给出的完整操作序列是从路径名开头提取所有者用户名annexample.com到key.upspin.io的键服务器查询该用户的目录服务器地址联系目录服务器求值完整路径名返回持有内容的存储服务器地址与引用列表联系存储服务器取回数据。这套序列被封装进客户端client库中也可以通过命令行工具或 Unix 上的 FUSE 插件upspinfs使用。存储与目录服务器可以运行在任何地方但预计多数会作为云服务部署以便可用性、可扩展性与维护。此外接口设计使得在客户端与服务器之间插入缓存层cacheserver很容易以缓解远程网络访问的开销。端到端加密与密钥管理主页提到 Upspin 提供端到端加密以保证隐私细节在 Upspin 安全文档 中展开。Packing数据打包方式Upspin 将如何把键指向的数据变成用户数据的技术称为packing打包方式可能涉及校验和验证、解密、签名验证或者什么都不做。upspin/upspin.go 定义了如下取值常量值含义UnassignedPack0未指定打包方式仅建目录时允许PlainPack1不加密、无完整性保护字节原样拷贝但SignedName等字段仍签名EEPack20椭圆曲线端到端机密性 完整性保护默认AES 加密数据附带 ECDSA 签名与 ECDH 包装的密钥EEIntegrityPack22与 EE 类似但不提供机密性仅提供端到端完整性适合read: all场景EE packing 支持按用户密钥曲线选择参数p256AES-256、SHA-256、曲线 P256强度 128、p384AES-256、SHA-512、曲线 P384强度 192、p521AES-256、SHA-512、曲线 P521强度 256。双层加密机制默认的ee加密过程是双层的写入文件时客户端随机生成一个文件密钥dkey用 AES-CTR 加密文件内容密文送往存储服务器对每个有读取权限的读者用其公钥通过 ECDH 把 dkey 包装wrap起来与数字签名一起存放在目录条目DirEntry中读取时读者在目录条目中找到用自己公钥包装的 dkey解密恢复 dkey再用 dkey 解密数据。加密、签名与密钥包装全部发生在客户端机器上而不是任何服务器上——目录服务器与存储服务器、乃至网络嗅探者都看不到明文内容。文档特别指出目录服务器存储的元数据明文路径名、读者公钥列表只受目录服务器内的访问控制保护因此对元数据高度敏感的用户可以自行运行目录服务器。密钥管理用户加入系统时向中心键服务器发布公钥。键服务器通过发布完整、增量哈希的事务日志key.upspin.io/log使篡改可被检测用户被鼓励比对日志哈希、留意自己密钥的任何非本人发起的变化。本地密钥的存放约定doc/security.md公钥$HOME/.ssh/下的public.upspinkey可安全交给任何人是注册到键服务器的材料私钥同目录下的secret.upspinkey仅靠普通文件权限保护无额外口令旧密钥对存放在secret2.upspinkey用于解密历史内容。keygen会打印一个以 proquint 形式表达的 128 位秘密种子secret seed作为人工可读备份。密钥轮换是一个多步流程doc/security.md 给出了完整的操作时序表upspin 命令操作public,secret.upspinkeysecret2.upspinkey键服务器签名包装初始密钥k1-k1k1, -k1生成新密钥keygenk2k1k1k1, -k1countersignk2k1k1k2, k1k1rotatek2k1k2k2, k1k1share -fixk2k1k2k2, k1k2对应的子命令实现见 cmd/upspin/keygen.go、cmd/upspin/countersign.go、cmd/upspin/rotate.go、cmd/upspin/share.go。系统没有任何密码也无意引入密码私钥相关操作被集中到factotum包factotum/factotum.go为将来类似 qubes-split-gpg 或 ssh-agent 的隔离实现预留了接口——Factotum接口定义见 upspin/upspin.go。访问控制Access 文件与 GroupUpspin 的访问控制模型在 doc/access_control.md 中有完整描述主页将其概括为易于使用的文件夹分享模型。默认完全私有默认情况下什么都不会被共享用户加入 Upspin 后创建的所有数据对其他人不可见。共享的单位是目录——用户在该目录中放一个名为Access的文本文件用简单文本格式描述授予的权利与用户。例如Access文件包含read: joehere.com, moethere.com就允许joehere.com和moethere.com读取该目录及其所有子目录中的文件。若某个子目录含有自己的Access文件则从该子目录向下其权利完全取代父目录Access文件授予的权利。所有者路径名开头的用户始终拥有读取自己树中所有文件、以及更新其中任何Access文件的权限。五种权利与 Unix 不同Upspin 没有 execute 权限只有两类对象的权利对象权利说明文件Read查看文件内容发现绑定到名字的存储引用文件Write替换文件内容Upspin 的 I/O 语义决定这是整体替换目录Create在目录中新增条目Access与Group文件除外永远仅限所有者目录List查看目录内容条目名、大小等公开属性与可访问者列表目录Delete从目录删除条目作为特别预防目录必须先清空才能被删除权利的拼写大小写不敏感可缩写为第一个字符也可用逗号分组例如r: family, bobgmail.com w,c,list: family通配符与 GroupAccess与Group文件中*表示所有权利即*: family等价于同时授予 read/write/list/create/delete。用户all忽略大小写表示任何已认证的 Upspin 用户*example.com表示任何属于example.com域的已认证用户。all有两个限制必须是一行中唯一提到的用户且不允许出现在Group文件中以防误把数据公开给全世界。组Group由所有者用户根下Group子目录中的文件定义文件路径即组的全局名。例如annmachine.com创建文件annmachine.com/Group/family内容为bobgmail.com ricardoexample.com grandmaexample.com则组annmachine.com/Group/family包含上述用户加上所有者本人。在自己的Access文件中所有者可省略前缀写family作为简写。隐私导向的错误语义为让用户难以在未授权的情况下探测有效名字操作失败时优先返回为隐私原因隐藏信息类错误而不是权限被拒绝若用户已有部分权利但不满足所需权利才返回权限被拒绝。Glob目录搜索操作在无权限时会直接从结果列表中省略对应条目。配置文件与命令行工具主页的开始指向注册流程而注册后的一切交互都依赖配置文件其完整说明见 Upspin 配置文档。配置文件格式配置文件默认位于$HOME/upspin/config是纯文本 YAML 格式每行为空白、注释或key: valueusername: annexample.com dirserver: dir.example.com storeserver: store.example.com cache: localhost:8888 cmdflags: cacheserver: cachedir: /usr/augie/tmp cachesize: 5000000000各设置的含义设置项说明默认/要求username用户的电子邮件地址必须存在packing写入时用于加密/保护数据的算法默认eekeyserver用于发现其他用户公钥的键服务器默认key.upspin.iodirserver存放用户目录树的服务器必须设置storeserver写入新数据的存储服务器必须设置cache本地缓存服务器地址y/n或具体地址未设置则不使用secrets存放公钥/私钥的目录默认$HOME/.sshtlscerts存放 TLS 根证书的目录默认使用系统根证书集实际使用中通常只需username、dirserver、storeserver与cache四项。服务器地址的一般格式为remote,dir.example.com:443——传输方式transport默认remote端口默认 443HTTPS/TLS因此通常可简写为dir.example.com另两种传输inprocess进程内服务常用于调试与unassigned不存在的服务器仅在专家场景出现。配置文件还可为各命令指定默认 flag 值cmdflags段cacheserver与upspinfs命令会读取这些设置命令行显式指定的值会覆盖之。upspin 命令行工具upspin命令用于创建和管理 Upspin 文件、用户与服务器。cmd/upspin/main.go 的说明指出数据通常通过upspinfs以宿主文件系统方式访问但upspin命令仍不可替代例如修改用户密钥user、更新访问权限变更后的密钥包装share、查看文件全部信息info。注册的子命令包括countersign、cp、config、createsuffixeduser、deletestorage、get、getref、info、keygen、link、ls、mkdir、put、repack、rotate、setupdomain、setupserver、setupwriters、share、signup、snapshot、tar、user、watch、whichaccess另有独立的setupstorage与交互式shell。用法为upspin [globalflags] command [flags] path全局 flag 包括-config配置文件路径默认$HOME/upspin/config与-log日志级别。路径以开头表示当前用户的根annexample.comsuffix则带上后缀。快速开始注册新用户主页明确要求开始使用请走注册流程完整步骤见 注册新用户文档。安装工具需要先安装 Go然后构建工具$ go install upspin.io/cmd/{upspin,cacheserver,upspin-audit,upspinfs}latest工具会安装到$GOPATH/bin包括命令行工具upspin、图形界面upspin-ui、缓存守护进程cacheserver、存储审计工具upspin-audit以及 macOS/Linux 上的 FUSE 文件系统upspinfs。注册流程选择用户名一个你拥有的电子邮件地址注意用户名会出现在键服务器日志及你分享的任何路径名中启动upspin-ui开始注册第一步生成密钥对公钥发布到键服务器私钥只保存在本机此时务必抄写并妥善保存 secret seed——丢失密钥与种子将永久失去该身份及全部数据系统没有任何恢复机制第二步键服务器向邮箱发送确认邮件点击确认链接以证明你控制该地址此后 Upspin 永远不会再把该地址当真实邮箱使用即使邮箱账户日后被劫持也无法影响你的 Upspin 身份若打算加入已有的目录/存储服务器先请管理员把你的用户名加入服务器的Writers组。指定服务器并创建用户根注册完成后upspin-ui提供三个选项使用现有 Upspin 服务器部署到 Google Cloud Platform暂时跳过服务器配置、以只读模式使用。若选择前两者并正确注册程序会尝试在指定的目录服务器中创建你的用户根。验证成功的经典方式是upspin cp$ upspin cp ./hello.jpg yougmail.com/ $ upspin cp yougmail.com/hello.jpg ./ciao.jpg $ sum hello.jpg ciao.jpg 1600 21 hello.jpg 1600 21 ciao.jpg用 upspinfs 挂载命名空间在 Linux/macOS 上可以像挂载本地文件系统一样访问 Upspin 命名空间$ mkdir $HOME/up $ upspinfs $HOME/up $ ls $HOME/up/yougmail.com若第二次运行upspinfs报Transport endpoint is not connected之类的 fuse 错误卸载后重挂即可。文档地图从首页出发的系统化学习路径doc/index.md 的 Documentation 一节指向 文档总览页后者按主题给出了完整的注释式链接构成系统的学习路径入门高层次的 Upspin 总览动机与总体设计、FAQ用户指南注册新用户、访问控制、配置工具upspin命令、upspin-ui、cacheserver、upspinfs、upspin-audit架构架构页多幅图示、访问控制、安全模型系统设置与管理部署upspinserver编程核心接口定义 upspin/upspin.go、RPC 线协议rpc、客户端接口client。此外首页还列出了社区资源GitHub 仓库、问题跟踪器、官方讨论邮件列表、贡献指南等详见仓库根目录的 README.md、CONTRIBUTING.md 与 CONDUCT.md。项目的吉祥物 Augie 由 Renee French 设计介绍与使用规则见 doc/mascot.md。现状与注意事项需要明确两点以免误导读者中心基础设施已于 2025 年关停根据 README.md 顶部的公告Upspin 团队决定逐步关闭中心基础设施如键服务器2025 年 3 月 4 日起键服务器关闭一周5 月 6 日起永久关闭。因此本仓库中的代码与文档更适合作为架构研究、源码学习与自托管部署的基础公共的key.upspin.io服务不再可用。项目定位是实验性的README 明确说明 Upspin 尚有不少粗糙之处不适合非技术用户它不是 Google 官方产品性能不是首要目标统一性与安全性才是。其目标用户是个人、家庭或朋友群体而非企业信息系统——尽管可用于企业场景但细粒度分享模型与个人密钥的使用在企业中会显得笨拙。从源码结构看Upspin 的全部能力都建立在 upspin/upspin.go 定义的那组简单接口之上无论键服务器、目录服务器还是存储服务器任何人都可以实现并接入这一命名空间。这正是主页所强调的愿景——Upspin 只是一种访问方式数据是什么、数据在哪里由你自己决定。赞分享后端密码学【免费下载链接】upspinUpspin: A framework for naming everyones everything.项目地址https://gitcode.com/gh_mirrors/up/upspin点击查看免费下载相关推荐产品管理工作流实战指南Product-Management 插件把 Claude 变成你的专属产品经理产品管理工作流实战指南Product Management 插件把 Claude 变成你的专属产品经理 从一个周五下午开始 周五下午你要同时交出一份工程在等后端密码学Hydra 1.2 升级指南hydra.job.chdir 与任务运行时工作目录行为的变更解析Hydra 1.2 升级指南hydra.job.chdir 与任务运行时工作目录行为的变更解析 在 Hydra 1.2 之前 hydra.main 装饰的后端密码学Apollo命名空间深度解析公共配置共享与覆盖Apollo命名空间深度解析公共配置共享与覆盖 在分布式系统中配置管理往往面临两大核心挑战如何高效共享通用配置以及如何灵活处理不同环境的配置差异。Apo配置中心后端微服务上一篇Zabbix 与 OTRS Community Edition 集成指南基于 Webhook 媒体类型的工单通知完整实践下一篇AntiMicroX项目Xbox Series手柄Share键在Windows系统的映射问题解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考