我们打造自己的产品,并让它们持续运行。

Fantagram 是一支 AI原生团队,在数据(KTRENZ)、电商(Welike)与私密通信(Krypton)三个领域积累了深厚的专业经验。

[email protected]

01产品

  1. KTRENZ

    状态:已在 ktrenz.com 上线

    KTRENZ 数据报告页面:英文标题称,KTRENZ 在过去 90 天追踪的 K-pop 发行作品中有 41% 来自第三代艺人,下面是醒目的 41% 和按世代划分的发行占比条形图。
    ktrenz.com 上的一篇数据报告

    以英文为主的韩国文化数据平台兼媒体,用数据衡量韩流。

    • Trend 根据韩国搜索量、YouTube、媒体报道和挑战赛的 7 天增速为艺人排名。
    • 开放数据通过四个公开的 REST 接口提供,无需密钥即可调用。
    • K-Track 根据 KTRENZ 自己的服务器日志,统计每个发行页面被哪些答案引擎抓取。
    平台
    Web,响应式
    技术栈
    • Next.js 14、React 18、TypeScript
    • Supabase(Postgres)
    • Cloudflare Pages 和 Workers

    ktrenz.com工作原理

  2. Welike

    状态:上线前;已开放注册

    Welike 面向达人的页面:深色背景上是英文大标题,邀请达人接下自己真正愿意发布的韩妆合作,下方是一段为达人匹配韩妆合作的说明。
    welike.show 面向达人的页面

    一个托管式平台,让韩妆品牌无需美国公司实体、美国物流或当地团队,即可在美国 TikTok Shop 销售。

    • 为品牌对接美国 TikTok 达人,并处理邀约、免费样品和佣金。
    • 每条视频上线前,都会检查是否符合 FTC 的 #ad 广告披露要求,以及 FDA/MoCRA 的化妆品功效宣称规则。
    • 对接 TikTok Shop Open API(OAuth、webhook),收款与打款通过 Stripe Connect 完成。

    由 Fantagram 开发并维护。Welike 由 Milestone Innovation Labs Inc.(美国)与 주식회사 위라이크(韩国)运营,其中前者为记录商户(MoR)及 TikTok Shop 卖家。

    平台
    Web:韩文品牌端应用、英文达人端应用
    技术栈
    • React 18、Vite、TypeScript
    • Supabase(Postgres,18 个 Edge Functions)
    • Cloudflare Pages

    welike.show工作原理

  3. Krypton

    状态:iOS 正在 TestFlight 测试;Android 已完成构建

    在手机上浏览的 krypton.today“一度好友”板块:上面是关于一度好友和二度好友的说明,下面是与“我”相连的人物关系图。 在手机上浏览的 krypton.today“封装”板块:上面是关于端到端加密的说明,下面的面板以密文显示名字和简介。
    在手机上浏览 krypton.today

    仅限邀请加入的社交应用,面向彼此真正认识的人。

    • 帖子、回复、照片、视频和个人资料都经过端到端加密,我们的服务器无法读取。
    • 注册无需手机号或邮箱。账户就是在你手机上生成的密钥。设置恢复后,即使手机丢失,也能凭你的 PIN 和你托付了密钥碎片的一度好友(在 Krypton 上与你直接相连、彼此认识的人)找回账户。
    • 无广告。截屏已被屏蔽。
    平台
    iOS、Android
    技术栈
    • Expo、React Native、TypeScript
    • Rust 加密核心、Swift、Kotlin
    • Supabase
    • Cloudflare Workers 和 R2

    krypton.today工作原理安全设计

02工作原理

KTRENZ

KTRENZ 定时采集公开数据并加以衡量,再把结果发布在自己的网站上,同时作为开放数据提供。

从公开来源到开放数据
  1. 1

    数据源。YouTube、Naver、X、TikTok、Ticketmaster、TMDB 和韩国公共数据,以及 KTRENZ 自己的服务器日志。

  2. 2

    采集。Cloudflare Workers 的 cron 每 1 分钟和每 10 分钟各触发一次,启动 17 种定时任务,结果写入 Supabase 上的 Postgres。

  3. 3

    衡量。Trend 根据韩国搜索量、YouTube、媒体报道和挑战赛的 7 天增速为艺人排名。K-Track 读取 KTRENZ 自己的服务器日志,统计每个发行页面被哪些答案引擎抓取(虚线)。

  4. 4

    发布。ktrenz.com;四个无需密钥的 REST 接口;以及一个远程 MCP 服务器和一个 npm 包,均已列入官方 MCP Registry。

Welike

Welike 让韩妆品牌通过美国达人在美国 TikTok Shop 销售,并在品牌或视频上线前进行检查。Welike 尚未上线,以下步骤是已开发完成的产品所执行的流程。

从商品上架到打款
  1. 1

    品牌。在韩文品牌端网页应用中上架商品,或从亚马逊导入。

  2. 2

    检查。为每个品牌提供合规检查清单,并对其文件进行两阶段筛查。筛查结果仅供参考,由人工做出决定。

  3. 3

    达人。在英文达人端应用中匹配并邀请美国达人。达人获得免费样品并赚取佣金。

  4. 4

    检查。每条达人视频在上线前,都会检查是否符合 FTC 的 #ad 广告披露要求,以及 FDA/MoCRA 的化妆品功效宣称规则。

  5. 5

    TikTok Shop。订单通过 TikTok Shop Open API 接入,使用 OAuth 和 webhook。

  6. 6

    Stripe。收款和打款通过 Stripe Connect 完成。

Krypton

Krypton 在用户自己的手机上加密封装他们写下的内容。

封装一条帖子
  1. 1

    作者的手机在其 Rust 核心内生成一把新的内容密钥。

  2. 2

    用这把密钥加密帖子:文字、照片和视频。文字会先被填充到相应的长度档位,因此不会暴露确切长度。个人资料同样在手机上封装。

  3. 3

    用每位读者的加密密钥分别封装这把内容密钥,每位读者一个 104 字节的信封。

  4. 4

    读者的手机在其 Rust 核心内,用自己的加密密钥打开属于自己的信封。

  5. 5

    然后解密帖子。

在两端之间,服务器存储密文和信封,并负责转发。它能看到谁在何时发给了谁,但无法读取帖子、回复、照片、视频、名字或个人资料。服务器能看到和看不到的全部内容,见下文安全设计。

在新手机上找回账户
  • 设置。你设定一个 6 位数字 PIN,并选择 2 至 7 位一度好友。手机用秘密 S 把你的账户密钥和加密密钥封装成一份备份;S 由 T 和 U 两半组成。T 被拆分成若干密钥碎片,其中任意 2 个即可重建 T;每个碎片分别封装给一位一度好友。我们的服务器保存 U、备份和这些封装后的碎片;每个碎片只有对应那位一度好友的手机才能打开。手机只发送 PIN 经过密钥拉伸后的值,服务器负责统计输错的次数。

  • 手机丢失时。一位一度好友向你发送一次性恢复链接。你在新手机上输入 PIN;保管人(持有你密钥碎片的一度好友)通过电话确认是你本人,然后打开自己的碎片,并把它重新封装给新手机的密钥。

  • 等待。满足以下任一条件时,服务器才交出 U 和备份:2 位保管人已批准,且自输入正确 PIN 起已过 48 小时;或者在不输入 PIN 的情况下(前提是你选择了至少 4 位一度好友),4 位保管人已批准,且已过 14 天。你的旧手机会收到通知,并可以取消恢复。PIN 输错五次,恢复将被锁定一天。

  • 找回完成。新手机在其 Rust 核心内重建 S,打开备份,并用找回的账户密钥为新的设备密钥签名。旧设备会被登出。

  • 任何一方都无法单独完成。单个保管人做不到。保管人没有 U 也做不到,而服务器只会按上述条件交出 U。服务器没有 T 同样做不到:保管人重新封装碎片时,用的是我们的服务器转交过来的新手机密钥,但要先在通话中听取新手机屏幕上的六位数字并输入,数字一致才会封装;服务器换上的密钥与这个数字吻合的概率,对每位保管人都是百万分之一。这项核对挡不住有人在电话里冒充你的声音,对仍在使用旧版应用的保管人不起作用;设置时保管人的密钥被调包,要等接收者核验启用后才能防住。

通过邀请加入
  1. 1

    申请。你的手机生成你的密钥,无需手机号或邮箱。你以链接或二维码的形式,向一位你认识的成员发出邀请申请。链接里不含名字:你的名字和简介用由链接中 # 之后的秘密派生的密钥封装,我们的服务器拿不到这个秘密;后续步骤也只以封装后的形式或加盐哈希传递你的名字。

  2. 2

    邀请与确认。由现有成员或 Krypton 团队邀请并确认你。原则上,由两位成员共同邀请你,并各自确认你;在 Krypton 的成员数达到设定人数之前,一位即可。邀请和确认都用各自的密钥签名,并由我们的服务器记录。在不含名字的邀请启用之前,邀请链接的 # 之后带有邀请人的名字。

  3. 3

    成为成员。你已加入。确认你的人就是你的担保人,会显示在你的名片上。

03安全设计

Krypton 的加密运行在 iOS 与 Android 共用的同一个 Rust 核心中。

Rust 核心中的密码学原语
原语用途
X25519把内容密钥封装给读者。每个信封都使用一个新生成的一次性密钥对和读者的公钥。全零的共享秘密会被拒绝。
Ed25519账户身份密钥和每台设备的设备密钥。账户密钥为每台设备的证书以及账户的加密密钥签名。
XChaCha20-Poly1305对所有封装内容进行加密和认证:帖子正文、信封、包装后的密钥、恢复备份、照片和视频。使用随机的 24 字节 nonce;文件的各个分块使用一个随机的基础 nonce 加上分块编号。
HKDF-SHA256由 X25519 共享秘密派生每个信封的密钥(以双方公钥作为盐),以及由两半(T 和 U)派生恢复秘密。每种用途都有各自的标签。
GF(28) 上的 Shamir 秘密共享把恢复秘密的其中一半拆分成密钥碎片。有限域运算以常数时间执行,不使用查找表。
操作系统随机数生成器生成所有密钥、nonce 和密钥碎片的系数。
密钥存放在哪里
私钥
Rust 核心内的四个槽位:账户(Ed25519)、设备(Ed25519)、加密(X25519),以及一把临时恢复密钥(X25519)。
内容密钥
每一项内容各用一把新的随机密钥,保存在核心内部。应用拿到的只是一个不透明句柄,而不是密钥材料。
静态存储
iOS 上存于 Keychain;Android 上用 Android Keystore 中保存的密钥加密后存储。私钥只有在交给原生封装层存入上述位置时才会离开核心。
JavaScript
没有任何调用会把私钥返回给应用的 JavaScript;另有一项边界检查会扫描应用代码,查找其中处理密钥的代码。
我们的服务器
公钥。用于恢复的有:备份、服务器持有的一半 U,以及每位一度好友的密钥碎片(经过封装,只有该好友的手机才能打开)。缺少 T 时,以上任何一项都无法打开备份(见上文找回账户的图)。恢复链接只以带密钥哈希(HMAC)的形式保存,并在恢复请求结束三天后删除。此外还有 Krypton 团队网页版账户的密钥,用我们的服务器所没有的口令锁定。
密钥核验
手机从我们的服务器获取彼此的公钥,并检查每把加密密钥是否由其账户密钥签名。应用内目前还没有比对密钥的方式,因此这一点依赖于我们的服务器分发正确的账户密钥。对接收者的核验(从创始人和 Krypton 团队延伸下来的成员证书链、每段一度好友关系上双方的签名,以及二度好友须经由一位已核验的一度好友的路径)已经做好,但尚未启用;在启用之前,如果我们的服务器上混入假成员、假的一度好友关系或假密钥,手机也可能为其封装。恢复时,保管人还会在通话中用一个六位数字核对新手机的密钥。
Krypton 的服务器能看到和看不到什么

无法读取

  • 帖子、回复、照片和视频。文件以密文形式存储。
  • 名字、一句话简介和头像。名片(名字、一句话简介、担保人的账户编号、头像的粗略马赛克版本)和半模糊的头像,在名片主人选择“仅一度好友”时分别封装给每一位一度好友,选择“二度以内”(这是默认设置,创始人则从“全体公开”开始)或“全体公开”时分别封装给每一位一度好友和二度好友。设为“全体公开”的名片还会用成员密钥封装,因此所有成员都能打开,包括 Krypton 团队自己的账户;同时拿到任意一位成员的密钥和我们数据库副本的人,可以读取所有这类名片。无论哪一档,半模糊的头像都不会发给二度好友以外的人,头像原图只有一度好友能打开。主人缩小范围时,我们的服务器会立即删除用成员密钥封装的部分;改为“仅一度好友”时,还会立即删除给一度好友以外的人的信封。随后手机用新密钥重新封装名片,头像的密钥保持不变,以便头像仍能打开。范围较宽期间别人已经拿到的密钥和已经看到的内容,无法收回。对设为“仅一度好友”的名片,无论应用是哪个版本,我们的服务器都不接受给一度好友以外的人的信封。范围只适用于这张名片,不适用于只发给一个人的名片(见下一项)。只显示两档的旧版应用中,较窄的一档相当于“二度以内”,在那里无论选哪一档,都会取消“仅一度好友”。用还没有公开范围设置的更早版本应用上传的名片,在更新应用并重新上传之前,仍用成员密钥封装。让团队账户不再持有成员密钥的改动已经做好,但尚未启用。
  • 只发给一个人的名片。随一度好友申请或截屏、照片保存通知附上的名片,以及发给聊天中各人的名片,都分别封装给每一位收到的人。二维码、加一度好友的链接和邀请申请链接中的名片,用由链接中 # 之后的秘密派生的密钥封装,我们的服务器拿不到这个秘密;在删除之前,同时拿到链接和我们数据库副本的人可以打开它。这些副本会在申请结束、加一度好友的链接一天后过期或对方离开聊天时删除;申请和通知满 30 天后删除。链接中不含名字的邀请已经做好,但尚未启用;目前邀请链接的 # 之后带有邀请人的名字。
  • 链接预览。由作者的手机生成,并与帖子一起封装。
  • 帖子的确切长度。文字会被填充到若干长度档位,最小一档为 256 字节。
  • 新消息的内容。服务器发送的是一条通用提示语和一份封装后的副本;已解锁的 iPhone 会打开这份副本,显示是谁写的。
  • 手机号和邮箱地址。我们从不收集。

能看到

  • 每个账户的随机账户编号、成员状态、公钥,以及其名片的公开范围。
  • 谁和谁是一度好友,谁邀请并确认了谁,以及发生的时间。
  • 谁把帖子转给了谁。
  • 每条帖子的信封由谁持有,每个聊天里有谁,以及成员加入或离开的时间。
  • 每条帖子和回复的作者、接收者和时间。
  • 拉黑、举报,以及用于推送通知的设备令牌。
  • 截屏尝试和照片保存:谁、在谁的帖子或页面上、在什么时间。
  • 文件大小。照片和视频不做填充。
  • 被举报的帖子及其作者的名字,由举报人向我们开放。
  • IP 地址和请求时间,记录在我们托管服务商的访问日志中。对于未经邀请的注册,我们的数据库会把 IP 的带密钥哈希保留两天,用于限制注册。
实现与检验
内存
在 Rust 核心内,密钥和解密后的字节存放在释放时会被清零覆盖的缓冲区中,包括核心交给 Swift 和 Kotlin 封装层的缓冲区。解密后的照片和视频会保存在手机上的缓存中,以便再次打开时无需重新解密;退出登录和删除账户时会清空该缓存。
unsafe 代码
该 crate 禁止使用 unsafe。只有面向 Swift(C ABI)和 Kotlin(JNI)的两个边界文件允许使用。
边界
每个运行核心代码的 C 入口都会捕获 panic,因此核心内部的故障会以错误码的形式返回给应用。
大文件
以带认证的 64 KiB 分块加密。截断、重排、追加或拼接文件都会导致解密失败;只有整个文件校验通过后,解密后的文件才会出现;校验失败的文件不会留下任何内容。
Rust 测试
共 22 项:19 项单元测试,2 项基于共享测试向量的测试,以及 1 项检查 C 头文件与导出函数是否一致。
测试向量
Rust 核心与应用中用于开发的 JavaScript 核心采用相同的字节格式,并且双方都必须能打开对方的固定测试向量。
审查
上线前的内部审查涵盖七个方面:数据库权限、服务器函数、速率限制、媒体存储、应用本身、运营方工具和机密信息。审查过程中阅读了代码,并在服务器的本地副本上尝试了攻击。目前尚未进行独立审计。

04技术

平台
Web、iOS、Android
编程语言
TypeScript、SQL、Rust、Swift、Kotlin
运行环境
Cloudflare、Supabase(Postgres)
自动化测试
三个代码库中共有 5,000 多个测试用例
  • 跨平台移动开发基于 Expo 和 React Native 的应用,配合原生 Swift(iOS)与 Kotlin(Android)模块。用于:Krypton
  • 应用密码学iOS 与 Android 共用的 Rust 加密核心、保存在 Keychain 和 Keystore 中的密钥,以及基于 Shamir 秘密共享的社交式密钥恢复。用于:Krypton
  • 边缘 Web 平台运行在边缘运行时上的 Next.js,以及使用 Pages Functions 的 React 应用,均部署在 Cloudflare 上。用于:KTRENZ、Welike
  • 数据管道与衡量运行在 Cloudflare Workers 上的定时任务,从 YouTube、Naver、X、TikTok、Ticketmaster、TMDB 和韩国公共数据采集数据,并据此生成 7 天增速排名。用于:KTRENZ
  • 公开 API无需密钥的 REST 接口、远程 MCP 服务器和 npm 包,均已列入官方 MCP Registry。用于:KTRENZ
  • 电商与支付TikTok Shop Open API、Stripe Connect 打款、Stripe 订阅,以及带服务器通知的 App Store 订阅。用于:KTRENZ、Welike、Krypton
  • 合规工具检查 FTC 广告披露和 FDA/MoCRA 化妆品功效宣称规则,并对品牌文件进行两阶段筛查(仅供参考,由人工决定)。用于:Welike
  • Postgres 后端Supabase Postgres,包含行级安全、Edge Functions 以及 741 个受管理的数据库迁移。用于:KTRENZ、Welike、Krypton
  • 多语言产品一个应用内支持韩文、英文和日文;韩文品牌端应用与英文达人端应用并行。用于:Welike、Krypton

05联系我们

合作、媒体及一般咨询。

[email protected]

产品相关问题,请通过各产品的网站咨询。