BioforestChain / dweb_browser

BioforestChain Infrastructure
https://docs.dweb-browser.org
MIT License
14 stars 4 forks source link

【提案】 安全模块限制 #209

Open waterbang opened 1 month ago

waterbang commented 1 month ago

app进行安全限制

正式应用只允许挂载到有IPC备案应用安装中心进行安装。

bundle_signature

格式为 hex:{signature} 生成方式为:signature = sign(algorithm, "{app_id}:{bundle_hash}", private_key) 验证方式为:success = verifiy(algorithm, "{app_id}:{bundle_hash}" , public_key,signature)

public_key_url

该字段将会用于验证应用持有者的身份 该链接必须使用和app-id同域名的网站链接, 请求回来是一个“算法+公钥地址”的格式 "{algorithm}:hex;{publicKey}",比如说 rsa-sha256:hex;5394efaada3a24b624f098385496a85044a9ebb40dbc5f3ce945d3466d899121 请求回来的是公钥json。

dweb_signature

新增dweb_signature:string,metadata.json 内容进行签名。 该字段也是通过 私钥对hash 签名,通过 public_key_url 请求的公钥验证

上述签名算法将使用 ECDSA (Elliptic Curve Digital Signature Algorithm)(基于椭圆曲线密码学 (ECC) 的数字签名算法)

waterbang commented 2 weeks ago

ECDSA key example

{
    "crv": "P-256",
    "d": "1eQRkpP_wpVPIT0ksrihZFQSmCZyODQhxZcKnbagFAA",
    "ext": true,
    "key_ops": [
        "sign"
    ],
    "kty": "EC",
    "x": "N-kwtatqOClcrN56MUgGdKsMaq7B8fc7a7ks05URaO0",
    "y": "w3cM8fmuD53ZnOdTcSaNdyH8k6pDj5RrnZpo9VcmZV8"
}
Gaubee commented 2 weeks ago
  1. dweb://install添加原生的 i18n 支持
    1. 新增 mode 参数,为 i18n 时,会根据当前 DwebBrowser 所处的语言环境进行自动选择
    2. mode 参数向下兼容,缺省为 manifest,意味着将 url 输入的链接当作 manifest 来处理
    3. 新增 IDWebView.UserAgentBrandData("install", "2"),来告知浏览器 dweb://install 支持 mode 配置
  2. 公私钥生成与读取工具 dwebkeygen [--version=1] [--payload=] *.dwebkey.json
    interface DwebKeyV1 {
     version: 1;
     public_key: "HEX";
     private_key: "HEX";
    }
    type DwebKey = DwebKeyV1;
    1. payload 字段为选填,如果为空,那么就随机生成。如果填写一样的 payload 内容,那么会输出一样的 dwebkey.json 文件,所以可以用它来稳定生成您的密钥
  3. 签名工具 dwebsign [--format=json] *.json [-o *.json] --key=hex|*.dwebkey.json [--version=1]

    签名工具的目的是让 dweb 知道这个文件没有被篡改

    1. 以上参数都可以写在配置文件中,我们会调用翻译服务进行,翻译服务可以进行配置,也可以用命令行参数来支持
    2. 支持 -c custom-config.json,并读取指定配置文件中的dwebsign字段来应用配置。
    3. 如果没有 dwebsign 字段,那么会直接尝试读取 key 等配置字段
    4. 默认读取 dwebsignrc.json 文件
    5. format 参数意味着如何解析输入文件,默认会根据文件后缀进行切换。目前默认只支持 json
    6. json 格式下,签名工具会在文件内添加 dweb_sign 字段
      interface DwebSignatureV1 {
      version: 1;
      public_key: "HEX";
      signature: "HEX";
      }
      type DwebSignature = DwebSignatureV1;
      interface JsonWithDwebSignature {
      dweb_sign: DwebSignature;
      }

      目前第一版本,使用 Ed25519 算法进行签名

  4. 自动翻译工具 dwebtranslate --mode=manifest *.json --from=zh --to=en,ja --outdir=i18ndir [--server-api-key=]
    1. 以上参数都可以写在配置文件中,我们会调用翻译服务进行,翻译服务可以进行配置,也可以用命令行参数来支持
      1. 支持 -c custom-config.json,并读取指定配置文件中的dwebtranslate字段来应用配置。
        1. 如果没有 dwebtranslate 字段,那么会直接尝试读取 to/from 等配置字段
      2. 默认读取 dwebtranslaterc.json 文件
    2. 这里的 --mode=manifest 意味着翻译模式,就是将 json 文件当成 manifest 格式来处理,那么就会只针对该文件中必要的字段进行翻译
    3. 输出的文件夹中,会有一个 manifest.i18n.json 的文件,它会枚举这个文件夹中的其它多语言文件
      type ISO_6391_1 = "zh_CN" | "en_US" | "...";
      interface ManifestI18n extends JsonWithDwebSignature {
      ".": {
        version: 1;
        baseUrl?: string;
      };
      }
      1. 目前第一版本,使用 ISO 639-1 标准来制定 lang
  5. web 插件 @dweb-browser/dweb-install:
    import { dwebInstall } from "@dweb-browser/dweb-install";
    dwebInstall.manifest("./manifest.json");
    dwebInstall.i18n("./manifest.i18n.json");
    1. dwebInstall.manifest 会自动补全链接,并拼接成 dweb://install?url=https://xxx.json
    2. dwebInstall.i18n 会判断当前 dwebBrowser 是否支持 dweb://install?mode=i18n
      1. 如果支持,那么直接拼接成 dweb://install?mode=i18n&url=https://xxx.json
      2. 如果不支持,使用兼容模式,会自己在浏览器中下载指定的manifest.i18n.json文件,然后解析出所需的manifest.lang.json文件,再去调用 dweb://install?url
      3. 兼容模式下,不会去校验manifest.i18n.json的签名合法性
  6. plaoc bundle 会自己完成 dwebkeygen dwebtranslate dwebsign 一系列的工作。

扩展

  1. dweb://open?id=terminal.browser.dweb
    install --url=xxx
    dwebkeygen --payload=xxx # dweb://dwebkeygen?payload=xxx
  2. toolikt.dweb-browser.org.dweb
  3. dwebbrowser.exe install url=xxx

    dweb://install?url=xxx