AxiomaticTokenizer

分享于 

85分钟阅读

Web开发

  繁體
下载 axiomatictokenizer_attach.zip 1.28 MB


内容

屏幕截图

源代码许可协议

简介


作用域

特性

上下文

服务合作伙伴

赞助商实体

付款延迟延迟

继承者

Arbiters

订阅服务器

组身份验证插件

显示付款历史记录

恢复妥协服务

管理操作失败

执行证明失败

Signed_documents

令牌提交表单

自定义设置

已知问题


典型的集成电路集成技术。

添加服务服务。

算法

体系结构插件

参考代码格式

令牌格式

加密令牌格式

签名的文档格式

的弱点。

选择种子。

集成提示

AxiomaticTokenizerKeyGen

源代码详细信息

浏览器检测工具

端口

配色方案

向导,如用户界面

翻译工具

q&

历史记录



屏幕截图

主要屏幕截图:

atk/axiomatictokenizer1.png



"付款"/键盘截图:

atk/axiomatictokenizer2.png



源代码许可证

由AxiomaticId实体( www.axiomaticid.org ) 开发。 在"常识许可"/"。public 域许可证"下发布。

原始作者:George Gabriel ( www.gardenerofthoughts.org )。

Angel ( anmar.eu. org/projects/jssha2 )的原始SHA256代码,Johnston在BSD许可下发布。

由 Tom Wu ( www-cs-students.stanford.edu/~tjw/jsbn ) 编写的原始BigInteger代码,在BSD许可下发布。



简介

通过分离用户身份验证和用户身份验证的每个操作,提高了在线财务服务的安全性。

本文还提出了一些提高 javascript/html应用程序质量的技术,如移植性。色彩规划。翻译和用户界面等。

实现AxiomaticTokenizer是开发的开源应用程序,它是用HTML和JavaScript开发的,专门设计为移动设备( 如 pda )。

AxiomaticTokenizer适用于各种浏览器: Firefox,InternetExplorer,InternetExplorer移动,Opera,Opera 移动,Safari。



作用域

公理化令牌从通信 medium 分离付款( 一般身份认证),主要是互联网。

公理化令牌与银行支票相似,但它们是不可伪造的。

可以通过网络服务。第三方网络代理。邮件。邮件。电话。短信和安全执行付款。



特性

多服务支持。

多货币支持。

支持服务伙伴,赞助实体,继承者,组认证,付款延迟,支付仲裁,订阅(。/重复付款)。

付款历史记录可以从所有用户中隐藏。

如果服务的数据库受到威胁,则可以回收帐户所有权。

针对在线支付服务的具体操作。 包括服务管理操作。

用于将用户的共享秘密( 从密码短语中派生) 发送到服务的非对称加密( RSA )。

可以自定义的令牌完整性代码字段大小。 这是为了减少用户需要输入的字符数量。

令牌的可选 spy 保护。 这种保护的缺点是它显著增加了令牌的大小。

帐户 NAME 校验和,用于确保用户键入错误的帐户 NAME,他会对它的进行警告。 用户应该将他们的帐户名称和校验和一起发布,就像这个"alice/65"。

通过简单地将"#"添加到帐户名称末尾,将发送到服务的帐户名实际上是混合了写入的帐户名和服务名称,从而有效地隐藏了服务名称。

颜色主题。

多语言支持。

包含两个骰子和字符之间映射的表。 这是为了帮助用户生成真正随机的密码短语。

多平台:Firefox,InternetExplorer,InternetExplorer移动,Opera,Opera 移动,Safari。

轻松检查HTML和JavaScript开放源代码。



付款令牌示例

;;MTM ;MP ;aliceakula.pub; ;;DET ;DET YYM SJ5 C9G ;;



命令行上下文

在线付款的安全性今天是在严重的攻击,而且越来越糟糕的是越来越多的人开始付款。 类似间谍软件和网络仿冒的威胁会销毁用户对预期"做点什么"的网络服务的信心。

考虑进行网上支付的经典方式: 用户使用服务提供商创建帐户,并使用帐户 NAME 和密码对帐户进行身份验证。 发送密码的计算机可能会被间谍软件感染,间谍软件可以截获并将密码发送给用户。

这个问题可以通过专用的便携式设备解决,它可以访问互联网,设备不允许用户安装和运行其他应用程序。 从理论上讲,这种装置不能包含间谍软件。 但软件是不可以信的,并且它永远不能被信任 100%,特别是当使这种设备工作的代码量大。

但是有另一种方法,对于那些意味着业务的用户,管理大量数字货币的用户是关键的。 通过将身份验证过程与通信过程分离,达到了最大的安全性。

专用设备不再需要连接到 Internet,只需生成用户可以在 NAME/account. 中执行某个操作的身份验证信息。

Currently,但是他们的问题是,他们生成一个不依赖于支付信息,并因此可以用于认证计算机的信息,可能不同于用户的信息和恶意软件,这些信息可能会与用户的网页浏览器不同。

要使这个机制真正安全,令牌必须依赖于支付信息。 这个过程是直接的。 用户输入到设备中,所有信息都是支付所必需的。 然后,设备生成一个令牌,用户可以在连接到Internet的计算机上键入到web浏览器中的文本。



令牌

令牌对帐户所有者进行的每个操作进行身份验证,而不仅仅是登录( 与密码相同)。

每个令牌都是唯一的,并且使用加密操作( 散列) 创建,因此在不使用密码的情况下,拦截它的人不能使用( 再次) 进行不同的支付,比如在密码。

令牌是由必须发送到服务( 与用户帐户 NAME 一样,付款收款人的帐户 NAME,要付款的货币数量。)的数据生成的,一些动态数据( 就像现在的时间) 使令牌不同,称为共享机密。 共享密钥是由用户密码生成的。

令牌就像一次性密码。 它只可以用于一次保护数据。 使用后,必须放弃它,否则可以使用它再次执行相同的操作。 令牌与一次密码的差异是令牌保护要从用户发送到服务的数据,而密码仅用于比较。

服务确认用户请求的操作确实是由他启动的,使用用户发送的令牌来生成令牌。 如果两个令牌相同,只有帐户的所有者可以发送用户令牌,因此服务可以放心地执行请求的操作。

除了拥有帐户和服务的用户之外,它的他人都不可以能生成正确的标记。

在创建用户帐户时,用户将共享密钥发送给服务,并使用加密操作( 非对称加密) 来解密。 之后,共享机密永远不会发送到服务,比如密码,但只用用户和服务生成令牌。 生成令牌的方式使得任何人都无法提取用户或者共享密钥的密码。

令牌包含服务必须知道的纯数据,以便自己创建令牌和这里数据的哈希。 如果用户令牌和服务令牌相同,那么用户生成令牌的共享密码与用户帐户的共享密码相同。 这样,用户和他的动作被验证,令牌请求的动作被执行。



一个简单的解决方案

最初的意图是使用完全不对称的加密( 加密和签名) 开发一个复杂的解决方案,它将覆盖在线事务( 不一定是付款)的所有技术方面。 这种解决方案的问题在于,它对于一般用途来说太复杂了。

从简化和推广安全在线支付的需求来看,AxiomaticTokenizer诞生了。 它是一个用HTML和JavaScript编写的小型应用程序,因这里可以在所有主要的web浏览器上运行。 AxiomaticTokenizer是一个开放源码解决方案,可以使用简单的文本编辑器轻松地进行审查。

这个简化解决方案的一个主要好处是用户只需要知道他们的密码短语。 单个密码对于所有服务和帐户都足够,因为共享密码不是口令本身,因这里不能知道服务。 用户不需要存储密钥对。签名文档。加密文档。需要备份的文档。可以能丢失( 和数字货币)的文档。

对于用户,AxiomaticTokenizer提供了一个简单。标准化的用户界面。 对于服务提供者来说,与令牌标准的集成是简单的,可以轻松完成。 实际上,由于AxiomaticTokenizer被发布到 public 域,所以可以任何方式修改它以满足每个服务的需求。

简单。标准化的用户界面和安全是使AxiomaticTokenizer在线广泛使用高度安全支付的关键特性。



谁该用它?

基于密码的安全性非常简单,因这里为了为基于标记的安全性交易,需要一些工作。

用户在账户中只有几百美元的数字货币,没有理由这样做。 但是,保护大量数字货币的必要性,从( of ) 数量的数字货币开始,激励用户处理令牌。



服务合作伙伴

服务合作伙伴是使用户到服务的实体,它们收到由这些用户支付的付费费用的一部分。 服务合作伙伴帮助服务快速增长。

当你使用服务创建帐户时,你可以能将服务合作伙伴的帐户 NAME 指定给你。

如果你在创建帐户时指定服务合作伙伴的帐户 NAME,你将在该帐户中收费较小的费用。

以下是如何拆分支付费用的示例。 支付费用是从支付的数字货币中扣除的1%。 以下百分比来自费用:

  • 服务获得 40%。

  • 生成帐户创建( 或者设置更改) 令牌的应用程序的开发人员获得 5%。

  • 如果帐户有服务伙伴,则合作伙伴获得 30%,否则该服务将得到服务。

  • 如果帐户有一个服务伙伴,用户将获得 20% ( 作为奖金),否则该服务将得到它。

  • 如果帐户有赞助实体,赞助实体将得到 5%,否则服务将得到它。

只有由服务选择的实体才是服务伙伴。 这样,用户一般不能为他们自己的帐户提供服务合作伙伴。



赞助商实体

当你使用服务创建帐户时,你可以能需要指定要发布的实体的帐户 NAME。

每次付款时,助理实体( 自动) 收到由服务收费的费用的一部分。

如果你的帐户没有赞助实体,该服务将获得整个支付费用。

只有由服务选择的实体才能被赞助实体。 这样,用户一般不能为他们自己的帐户提供助理实体。



付款延迟

如果你的NAME 帐户是 public,为了提高它的安全性,在你请求服务之后,该帐户所做的所有付款事实。

这样,帐户就像一个具有时间门的库,比如,门在夜间不能打开。

出于安全考虑,一旦设置了支付延迟,它只能增加( 未降低)。



继承者

用户帐户可能具有继承者。 这是一个特性,允许用户指定服务,以便自动将所有数字货币从帐户移动到继承帐户。

让我们考虑爱丽丝,谁拥有服务,死亡或者永久失效,以访问她的帐户。 没有继承者帐户,对于 Bob。她丈夫。她女儿和她女儿来说,接收继承的数字货币是非常困难的。

但是,如果Bob和Claudia拥有相同的服务帐户,Alice可以将Claudia帐户添加到自己的帐户中。 If ( 例如) 一年( 创建帐户时设置实际值) 不会发送任何有效的令牌,her账户会自动进入继承模式,即所有数字货币都会自动转移到继承者帐户,以及Claudia帐户的bob帐户。

数字货币分割的方式取决于Alice为每个继承者分配了多少继承份额。

Alice添加继承者时指定继承份额的数目。 数字货币为每个继承者分为一个分数,分配给继承者分配的继承共享总数。

例如,如果Bob拥有B 继承共享,而with接收到与"B/( B + C ) 相等的数字,则with收到一个等于"C/( B + C )的小数。



级联继承

从帐户到继承者帐户的继承数字货币的自动移动有一个有趣的副作用: 级联继承。

假设Alice作为继承者,而Bob以inheritor为继承者。 如果爱丽斯和鲍瑟都不能访问他们的帐户,当每个帐户进入继承模式时,into都会收到。



Arbiters

每当你想买一个付款,你可以使用仲裁器中间的数字货币传输。

为此,只需在"付款"页面中的"仲裁帐户 NAME"编辑框中键入仲裁器的帐户 NAME,在 AxiomaticTokenizer。

当你将生成的令牌发送到服务时,数字货币从你的帐户中取出并放入一个包含所有用户的队列。

这里时数字货币仍然属于你,但是在服务的唯一控制下,将被发送到由仲裁者选择的帐户。

仲裁者可以决定将数字货币发送回你,或者将它的发送给付款的收件人。 仲裁器可以 do数字货币做任何其他事情,如用它的( 除非仲裁方和你的付款的收件人是相同的实体)。

请注意,如果使用仲裁器,你可能会收取额外的支付费用( 最高费用取决于每个服务。)。



数据驱动订阅

有时候你可以能想订阅服务,或者在期间购买某些内容,并自动进行定期付款。

你可以使用"安装订阅"操作来设置一个支付,该付款将对于指定数量的货币,用于同一帐户 NAME。

第一个付款是在你设置订阅时进行的,然后在指定的时间段之后重复。

服务可以能允许用户更改下一期付款的货币数量,但只有当金额小于初始金额时。



组身份验证

组织可以使用组身份验证,以确保只有当组织成员同意执行相同的操作时才能访问帐户。

例如,一个组织可以能拥有一个支付服务的帐户,它保持( of )的金钱。 组织不希望任何单个成员拥有完全访问这里帐户的权限,而只有 3 ( 超出 5 ) 成员同意支付。

当使用组身份验证执行操作时,生成令牌的所有成员都必须在 AxiomaticTokenizer ( 当然,他们自己的密码短语) 中键入相同的信息。 然后,他们必须使用类似于的形式发送他们的标记。

服务检查所有令牌是否对该帐户有效,并确保令牌的所有信息都是相同的,除了时间戳和令牌完整性代码。 如果所有这些都是正确的,则执行操作。

组的两个成员不能具有相同的口令短语或者共享密钥。

出于安全原因,一旦创建帐户,就不能更改组身份验证。

除了"更改密码短语"/"。索赔被泄露的帐户"和"登录帐户"以外,所有操作都受到影响。

服务( 它支持组身份验证)的令牌提交形式必须提供显示用户组织成员标记的足够编辑框的方式。

创建帐户时,令牌提交表单中键入的令牌数必须与组的成员总数。"创建帐户"令牌( 每个成员) 中指定的组数和组号相等。 只有当组成员从服务中收到"成功"或者"lastexecuted"执行证明时,才能将帐户归为组,否则必须放弃帐户名称。

在所有它的他操作( 受组身份验证影响)的情况下,令牌数必须等于当前成员数目;否则,操作不执行。

对于受组身份验证影响的所有操作,执行证明对组的每个成员都是独立的。



细微

要执行的操作是由当前成员数量的确切要求的数量进行身份验证的,非常重要。

假设帐户有组身份验证设置为" 3/9"( 3 超出 9 )。

在支付过程中,所有 9个成员都生成支付令牌令牌,攻击者可以将令牌的9个令牌分割成 3组,并将它的作为单独的支付请求发送到服务。

因为令牌没有办法识别相同的唯一操作,所以服务无法判断所有 3集实际上是指相同的支付,它将执行执行所有的3个支付。

令牌时间戳可以用来标识任何令牌的唯一操作,但这将要求所有组成员同步。



显示付款历史

在用户的帐户中,人们总是需要 public 账户,但是他们也需要一个帐号来隐藏,"隐藏"并不意味着从服务隐藏,而是来自其他人。

问题是如何将货币从 public 帐户转移到隐藏帐户,而没有它的他人知道传输。 这是通过服务解决的,通过不将历史记录保存到 public 帐户中的所有付款中。

为了允许这一点,AxiomaticTokenizer允许用户指定是否保留或者不使用帐户的所有付款历史记录。 出于安全原因,只能在创建帐户时指定,或者以后从"是"更改为"没有"( 从"没有"到"是")。

即使用户选择不保存付款历史记录,服务仍然可以在内部保存,但是保证没有它的他用户看到。

这个特性对需要跟踪收到的付款和制作的组织无用,但仍可以使用延迟付款和组身份验证。

个人可以能发现这个特性是唯一一个保护他们的人,他们想看到他们账户中的货币。



恢复受损服务

如果服务遇到安全漏洞,并且用户的所有共享秘密都可以被窃贼访问,将会发生什么?

AxiomaticTokenizer包括从此类事件中恢复的机制。

以下是服务必须采取的步骤:

  • 锁定数据库。

  • 查找并停止所有安全漏洞。

  • 交叉检查数据库的上次状态,以撤消因破坏而造成的损坏。

  • 如果AxiomaticTokenizer不对称加密密钥在安全漏洞期间受到危害,则更新中的服务信息,尤其是 public 非对称加密密钥。

  • 将所有帐户锁定后重新启动服务。 由于当前共享密钥被破坏,它们不再用于身份验证操作,因这里用户必须使用"。索赔被泄露的帐户"操作更改密码。

用户现在可以使用"。索赔被泄露的帐户"操作来收回他们帐户的所有权。

为了确保帐户的密码确实由它的实际所有者改变,而用于共享密码的标记包含前面的共享。 服务必须检查接收的预散列的哈希值是否与当前共享密钥相同。



管理操作

管理操作只能由某些用户执行,并且对服务的功能有深远的影响。 有关有效管理操作,请参见

任何用户都可以为管理动作生成令牌,但是为了让服务执行这样的令牌,必须允许执行令牌的帐户执行请求的操作。

管理操作可以能与任何现有帐户相关联,例如使用服务软件的管理或者使用"更改管理员操作"令牌。

在创建之前,不将管理动作与帐户相关联,因为其他人可能在预期实体之前创建帐户,从而获得管理员特权。



加密令牌

令牌可以用 public RSA密钥不对称加密,该密钥包括在要发送令牌的服务中。

加密的令牌可以通过未加密的通信通道发送,不显示它的内容。

用于创建帐户的标记,用于更改帐户密码和声明破坏帐户的( 而且必须) 始终被加密。

所有其他令牌都可能未加密( 虽然它们也可以被加密),这是由于以下原因而首选的:

  • 更短,用户可以键入。

  • 用户可以确保生成这样的令牌的应用程序没有更改类型化的数据,并将它的隐藏为 inside。



执行证明

AxiomaticTokenizer自动计算,并向用户显示一些名为"执行证明"的文本,用于所有标记。

执行证明是以唯一的方式计算的,从所有的令牌字段( 用于计算令牌完整性代码的)。

在向用户发送的响应中,只要令牌的完整性可以验证,服务必须总是计算并包含一个执行证明。 如果无法验证令牌的完整性,就像当它格式化时,不必向用户发送任何执行证明。

对于受组身份验证影响的所有操作,执行证明对组的每个成员都是独立的。

如果令牌排队等候以后执行,则可能无法发送执行证明。

然后用户可以比较服务发送的执行证明和AxiomaticTokenizer显示的执行证明。 如果存在 MATCH,则意味着服务保证执行证明手段确实发生了什么。



执行证明的类型

条件必须按照这里给出的顺序进行评估。

"成功":如果请求操作成功执行,则必须将它的发送到

如果令牌与上次成功执行的令牌相同,则必须将 lastexecuted。

"过期"以下命令:如果标记时间戳小于上次成功执行标记的时间戳( 或者在时钟同步时发生错误),则必须将该标记只发送给 标记。)"。 如果应该发送执行证明,则不能发送这里

"错误":必须在任何其他情况下发送。 如果"创建帐户"令牌无法创建请求的帐户,则服务必须发送这里执行错误证明。



原因

如果没有执行证明,帐户创建阶段会暴露给潜在的of ( = Man-In-The-Middle ) 攻击,如果攻击者可以截获。

为此,攻击者必须截获原始的"创建帐户"令牌,而不是将它的转发到服务。 因这里,服务不具有令牌中指定的NAME 帐户,因这里没有人可以支付该帐户。

后来,当用户尝试访问他的帐户时,他可能会使用未加密的令牌来执行 NAME。 这里时攻击者将截获用户的令牌并发送到( 阴影) 令牌,以便用用户指定的NAME 创建帐户。

从现在开始,攻击者实际上拥有那个 NAME的帐户,而不知道任何人。 在用户不再使用自己的( 阴影) 令牌替代用户令牌之前,至少在用户使用其他计算机连接到Internet时,才会出现这种情况。

为了防止这一点,用户必须比较服务发送的执行证明和AxiomaticTokenizer所显示的。

由于"创建帐户"令牌是加密的并且只有服务能够解密它,所以其他人无法计算执行证明。 因此,如果服务向用户发送"成功"执行证明,用户可以确定它的令牌确实被服务处理,而由他选择的帐户仅可以通过共享的机密访问。

other tokens tokens tokens tokens tokens tokens tokens,所以execution执行证明只提供服务处理的保证,而攻击者却没有在它的方法on停止它。



签名的文档

AxiomaticTokenizer可以处理已经签名的文档。 除了验证签名之外,它还可能执行进一步的处理,比如导入服务信息( 这里功能还没有实现)。

有关技术细节,请参见



例子

********** 开始AxiomaticTokenizer文档 **********

AEB 00F 2 B4 25A DD2 A77 D23 AA8 5 FFD FFD ABF ABF B

-------------------开始签名 --------------------

Version=1 ;

Type=Authenticate AxiomaticTokenizer ;

FFA=BckSha256 ;

ServiceName=AxiomaticTokenizer ;

ServiceSeed=CO6OS5PKPS57N948OV5J ;

KeyId=S1 ;

Time=20081226-132653 ;

Salt=C8F 5CF E3F 62C 0 D2 CA0 B6 ;

TextSize=85 ;

Value=01B A5E 3 F3 E76 8 D2 BCE C92 E0F BA9 CAF 59C 7 A9 80D 91 F 9 B7 0AF 35 F 045 5 A8 C51 85A 64 D D9D 30C 748 25E 63 D 425 9E8 377 ACA E2A 6CE FFA 269 69C 09 C 1FD E47 B24 8 B2 C97 1 A9 CB3 67A FCD C82 2FF B68 23E A17 144 AF2 366 0DA DF2 706 480 A92 498 D44 06B F63 67E 9 CC 3E9 8CB 804 652 00B 073 030 40F 6 C1 8E7 6CE 79 A 717 D6B EBC 15A 918 845 425 5E8 20E 352 835 897 FB7 F1A 646 FC1 603 82B 856 BEB E6A E90 A45 94F E64 8 C1 83A A72 E9F 5EA C7B 098 A40 1 B4 CDF 41C 381 995 BBE E5E A7D 874 5DF 0 B4 6BC 80 D 00E E23 14E EC9 01E 74 A 1 F9 47B F62 BEF 957 868 028 0 A6 F18 B2F 78E 5 FA 431 CB8 1 D8 851 D32 CEB 755 CA6 FAA 20C BAD 71D 2 BC 721 C84 CEA EE7 F71 6 B3 7 B8 0E7 ADC A7D 5 A1 531 149 54C DDC 0BA 0 D ;

*********** 结束AxiomaticTokenizer文档 ***********



令牌提交表单

服务可以使用附加归档中包含的令牌提交表单,用户可以在其中键入所生成的令牌。

你需要定制它以满足你的特定需求。

尽管这里表单可以脱机工作,使用户可以在它的中输入令牌,这意味着服务提供者失灵。



自定义设置

服务可能希望向用户提供下载和使用 original的可能性,但与一些自定义的内部值( 如默认语言和配色方案) 相同。

因为AxiomaticTokenizer不能改变,它意味着只有它的文件 NAME 可以改变。 文件 NAME 可以包含表单"name=value"中的自定义设置,全部由"_"分隔( 包括第一个)。 某些自定义设置可能是列表,在这种情况下,List的项被","分隔。

AxiomaticTokenizer解析启动文件表单的NAME,并将一些内部值更改为 MATCH。

以下是可能的自定义设置的List:

  • "clr = 初始颜色方案的NAME。

  • "kb"= 显示屏幕键盘。 如果这里设置的值为"true",则显示键盘,否则将隐藏该设置。

  • "lng = 初始语言的ID。

  • "spart"默认服务伙伴帐户名称。

  • "vsid"= List 中将对用户可以见的服务的to。"服务名称"组合框。 如果缺少这里选项,则所有服务名称都可见。

如果未指定自定义设置,则使用内部默认值。

下面是一个包含自定义设置的文件 NAME的示例: "( 忽略空白空格) axiomatictokenizer _ clr=paleblue _ lng=ro _ vsid=MTM。 当从具有这里名称的文件启动AxiomaticTokenizer时,初始配色方案为淡蓝色,初始语言为罗马尼亚,可见服务名称只有"metal"和"fiat"。



已知问题

从 Opera 9.5,这不再是一个问题。 Opera 9.24和 Opera 移动 8.65不会直观地更新自动选择的组合框项目。

从 Firefox 3,这不再是一个问题。 Firefox 有时不激活将文本( 从文本框外部) 复制到剪贴板的功能。 如果发生这种情况,首先从文本框中选择一些文本,然后选择并复制标记的文本。

InternetExplorer 8测试代码 2不能正确处理UNIX样式换行符,因这里AxiomaticTokenizer可以能无法加载( 根据使用的文本编辑器)。



要正确查看InternetExplorer移动上的集成键盘和"。骰子- 字符映射"table,必须不设置"菜单视图一列"设置。



典型集成

AxiomaticTokenizer只是客户端,用户界面。 在线支付服务必须实现服务器端,即解析传入令牌并在数据库中执行请求操作的代码。

一旦你的服务接受与这里标准兼容的令牌,你就可以将你的信息集成到 AxiomaticTokenzier。

你必须包含以下信息:

  • 服务信息是否必须对用户可见?

  • 服务 NAME,如"metal"。 这里字符必须至少有 3个字符并且必须是唯一的。

  • 服务种子。必须至少有 20个随机字符,必须是唯一的,并且可能永远不会更改。

  • 服务 ID,如"mtm"( 用于"metal")。 因为所有令牌都包含它,并且用户必须键入它,所以服务ID应该是短的。 这里字符必须至少有 3个字符并且必须是唯一的。

  • 信息有效的日期。 这与时间戳的格式相同,但必须只包含日期( 不是时钟)。

  • 用户可以在它的中找到标记可以输入并提交到服务处理的表单的weblinks。 有多个weblink可以用于减轻DDOS攻击。

  • 可以处理令牌的最新版本。

  • 接受的服务操作请参见下面的可用操作。

  • 服务对服务伙伴有支持? 请参见 服务合作伙伴的详细信息。

  • 服务是否支持受赞助的实体? 请参见 赞助商实体( 详情)。

  • 服务是否支持付款延迟? 请参见 付款延迟详细信息。

  • 服务是否支持继承? 请参见 继承者。

  • 服务是否支持组身份验证? 有关详细信息,请参见组身份验证

  • 服务是否支持 arbiters? 请参见 Arbiters 详细信息。

  • 必须始终将令牌加密发送到服务? ( 如果是,可以通过未加密的通信通道发送令牌,而无需担心失去隐私,但很难输入。)

  • 标记中包含的令牌完整性代码字段的字符数,并与服务端的比较。 如果这里值小于 18,则使用整个代码。 这只用于未加密的令牌,以减小它的大小。

  • 接受的货币名称请参见下面的可用名称。

  • 非对称加密密钥用于加密要发送到服务的令牌。 请参见下面所需的字段。

  • 不对称签名密钥。用于验证由服务创建的各种签名。 加密和签名密钥必须是不同的。 请参见下面所需的字段。

  • 允许的签名类型。请参见下面的可用类型。

  • 服务指纹版本。

  • 服务指纹。

以下是可用的服务操作: 创建帐户,更改口令,修改服务合作伙伴,更改支付时间,改变支付延迟,修改继承,修改,订阅帐户。

你必须在系统( 所有其他操作都是可选的) 中实现以下操作:

  • 创建帐户。

  • 更改密码短语。

  • 声明compromised帐户这里操作的实现可能会延迟,直到有必要。

  • 登录帐户。

  • 付款。

以下是可用的服务管理操作: 更改管理操作,停止服务,重新启动服务,锁定服务,锁定帐户,锁定帐户,锁增加平衡,增加平衡。

实现服务管理操作是可选的。

以下是可用的货币名称: 美国克朗,Gold,银币,ounce,澳大利亚美元,加拿大货币( 计算机),加拿大,加拿大,加拿大,加拿大货币,加元,us,us,美元。 可以添加其他货币名称。

非对称密钥具有下列必需字段:

  • 密钥标识符,如"e1"。

  • RSA public 密钥指数,如" 10001"。 必须是十六进制字符串。

  • RSA public 密钥模数;必须至少有 2048位。 必须是十六进制字符串。

以下是可用的签名类型:

  • 身份验证。如果需要,则自动使用。

  • 验证 AxiomaticTokenizer。

  • 导入自服务信息如果需要,则自动使用它。

  • 导入任何服务信息。

root 服务信息,仅由AxiomaticTokenizer用来验证签名(。不创建标记),不需要令牌提交 weblinks。服务操作。货币名称。

如果给定服务有效日期在 array 中出现多次,则服务 NAME/seed/ID 对于所有这些 array 项目都必须是不同的。

如果给定服务 NAME 在 array 中多次出现服务信息,则服务种子必须对所有这些 array 项目都是相同的。

如果给定服务种子在 array 中存在多次服务信息,则服务 NAME 必须对所有这些 array 项目都是相同的。

如果给定服务ID在 array 中存在多次服务信息,则服务种子必须对所有这些 array 项目都是相同的。

如果给定服务 NAME 在 array 中多次出现服务信息,则使用有效日期比当前日期更接近( 旧的)的array 项。



添加服务

你可以轻松地向AxiomaticTokenizer添加新服务。

在文本编辑器中打开源代码并搜索以下文本: "var serviceinfos"这里变量是一个包含所有支持服务信息的array。

将现有服务元素之一复制为新的服务元素,并更改它的信息。 请特别注意:

  • "servicename"。

  • serviceseed"。

  • serviceid"。

  • tokensubmitformweblinks"。

  • asymmencryptionkey"。

  • asymmsigningkey"。

  • servicefingerprint"。



算法

使用的算法是散列( 倾斜间距),mac ( MAC-SHA256 ),非对称加密( RSA )。

伪随机数生成器和对称加密被明确地从AxiomaticTokenizer的设计中排除。



32

byte array 通常用以下字符集(。不使用混淆字符) 在 32中表示为文本:

  • 0123456789abcdefghjklmnprstuvxyz"。

文本中的第一个字符对应于字节 array的最小 5位,等等。

加密令牌在radix中表示为文本,以简化互操作性。



MAC-SHA256

使用从共享密钥派生的两个密钥计算这里 MAC,使用两个弹出哈希。 一个键叫做 inner,一个外键。

内部键和外部键是以下连接信息的SHA256:

  • MAC内部/外部键种子。

  • 密钥( MAC的计算结果)。

第一个哈希值是以下连接信息的SHA256:

  • 内部键。

  • 消息( MAC的计算方法)的SHA256.

第二个哈希是以下连接信息的SHA256:

  • 外键。

  • 第一个散列。



校验和

校验和保证了文本不会被用户错误地键入。

校验和版本" 1"由计算文本的文本的文本表示( 在 32中)的第 2个字符组成。



体系结构



文本和数据填充

所有文本( 就像名字和密码)的字母大小写不敏感。 在比较和散列期间,所有文本都转换为大写。

所有文本都用ASCII-7编码。

标记由多个字段构成,每个字段由一个标记字段分隔符分隔: ";token总是以标记字段分隔符结束。 这里分隔符不包含在任何要哈希的数据中。

长文本始终显示在 3个字符的磁带中,它的中含有一个分隔符( = 空白空格)。 这里分隔符不包含在任何要哈希的数据中。



时间戳

时间戳由以下连接的文本时间信息构成,这些信息以UTC坐标表示:

  • 年,4位数字。

  • 月,2位数字。

  • 月,2位数字。

  • 小时,2位数字。

  • 分钟,2位数字。

  • 秒,2位数字。

时间戳使服务不能存储令牌,而且不必比较以前执行的令牌所执行的令牌。



上次成功执行的令牌

为了知道什么时候发送给用户,必须将最后一个成功的成功执行令牌存储到每个帐户中,以便知道什么时候发送给用户"lastexecuted"执行证明。 当成功执行新令牌时,前面的一个必须被覆盖( 它可能仍然存在于历史中)。

为了了解以后使用的令牌,必须对每个帐户成功执行的时间戳进行存储,以便知道以后使用的令牌小于或者等于

对于组身份验证的所有操作,必须存储组成员的所有标记。 另外,存储的时间戳是存储标记中最大的。



共享密钥生成

共享秘密是密码短语混频器的文本表示( 在 32中)。

通过以下连接信息的MAC-SHA256,密码端口搅拌器版本" 1"可以迭代( = 上一个二进制哈希值) 20次:

  • 密码短语搅拌机种子。

  • 服务种子。

  • 用户帐户定位器。

mac的关键是用户密码。

这种算法允许用户对所有服务使用相同的密码,因为共享的密码不同于用户的( 而且没有服务可以检索密码)。



服务指纹生成

这是为"生成服务指纹"服务操作执行的。

服务指纹版本" 1"由以下连接信息的文本表示( 在 32中)的前 25个字符组成:

  • 服务指纹种子。

  • 连接服务信息大小( 来自下一个项目符号的文本)。

  • 所有连接的服务信息以文本形式,每个由"|"字符分隔的信息 Fragment。 服务操作和货币名称以相同的方式连接。

如果AxiomaticTokenizer生成的服务指纹与服务本身发布或者由你信任的实体发出的服务指纹相同,则确保服务信息正确。



帐户定位器生成

这是为"生成帐户定位器"服务操作执行的。

帐户定位器版本" 1"由以下连接信息( 令牌的)的MAC-SHA256表示( 在 32中)的前 12个字符组成:

  • 帐户 NAME 搅拌机种子。

  • 服务种子。

mac的关键是用户帐户名。

算法使用户可以使用所有服务的帐户 NAME,而没有两个服务可以将帐户链接到同一用户。



令牌完整性代码

令牌完整性代码是以下连接信息的MAC-SHA256的文本表示形式( 在 32中):

  • 令牌完整性代码种子( 对于当前令牌版本)。

  • 所有令牌字段(。没有标记字段分隔符) 连接到一起。

mac的关键是共享密钥。 由于"创建帐户"令牌没有现有的共享机密,所以使用了新的共享密钥。

由于没有可以保证真实性的共享机密,因此,为了确保令牌的无损坏,令牌的完整性代码被计算出来。

根据服务的不同,如果令牌未加密,则只使用令牌完整性代码的第一个X 字符( 最小 18 )。



执行证明

执行证明版"at1"由以下连接信息( 令牌的)的MAC-SHA256表示( 在 32中)的前 15个字符组成:

  • 执行证明类型的种子。

  • 用于生成令牌完整性代码(。没有标记字段分隔符)的令牌字段。

mac的关键是共享密钥。



参考代码格式

将显示所有令牌的参考代码。 引用代码与关联标记具有相同的版本。

引用代码版本"at1"由以下连接信息( 令牌的)的MAC-SHA256表示( 在 32中)的前 15个字符组成:

  • 引用代码种子( 对于当前令牌版本)。

  • 所有令牌字段(。没有标记字段分隔符) 连接到一起。

mac的关键是共享密钥。

令牌引用代码由用户的AxiomaticTokenizer和服务计算。

操作有收件人时,服务必须将引用代码存储在收件人历史记录的帐户中,以及令牌数据。

在客户付款的情况下,由于引用代码可以计算,因这里在线商店也可以使用。 这里使用的字是"柔和",因为只要引用代码保持了三方的秘密。

如果需要在生成令牌后快速定位令牌,请保留令牌引用代码。



标记格式

AxiomaticTokenizer实现专门用于付款服务的令牌。

标记由多个字段构成,每个字段由一个标记字段分隔符分隔: ";"。这不包含在数据中的哈希。

标记可能包含空白。 这些必须在处理令牌之前删除。



付款令牌示例

;;MTM ;MP ;aliceakula.pub; ;;DET ;DET YYM SJ5 C9G ;;



创建帐户

字段:

  • 令牌版本。

  • 服务ID这允许自动处理令牌。

  • 操作标识符:"ca"。

  • 时间戳。

  • 生成器应用程序标识符。

  • 用户的帐户定位器。

  • 与用户帐户相关联的服务伙伴的帐户定位器。 如果用户没有指定服务伙伴,则该字段包含"nsp"。

  • 与用户帐户相关联的赞助商实体的帐户定位器。 如果用户未指定赞助实体,则这里字段包含"nse"。

  • 付款延迟如果用户没有指定付款延迟,则这里字段包含"npd"。

  • 继承触发器时间段。

  • 如果历史记录必须显示,则为"sh",如果要隐藏,则为"hh"。

  • 组身份验证这里字段包含两个数字: 第一个是现有成员的数量,第二个是组成员的总数。

  • 新共享机密的文本表示形式。

  • 令牌完整性代码。

这里令牌始终使用服务密钥的public 进行非对称加密。



更改密码

字段:

  • 令牌版本。

  • 服务ID这允许自动处理令牌。

  • 操作标识符:"cp"。

  • 时间戳。

  • 用户的帐户定位器。

  • 新共享机密的文本表示形式。 新共享机密可能为 one。

  • 令牌完整性代码。

这里令牌始终使用服务密钥的public 进行非对称加密。



索赔被泄露的帐户

字段:

  • 令牌版本。

  • 服务ID这允许自动处理令牌。

  • 操作标识符:"cca"。

  • 时间戳。

  • 用户的帐户定位器。

  • 当前共享密钥的前哈希的文本表示形式。

  • 新共享机密的文本表示形式。 新共享机密可能为 one。

  • 令牌完整性代码。

这里令牌始终使用服务密钥的public 进行非对称加密。

有关详细信息,请参阅恢复受损的服务服务。



更改服务伙伴

字段:

  • 令牌版本。

  • 服务ID这允许自动处理令牌。

  • 操作标识符:"csp"。

  • 时间戳。

  • 生成器应用程序标识符。

  • 用户的帐户定位器。

  • 与用户帐户相关联的服务伙伴的帐户定位器。 如果用户没有指定服务伙伴,则该字段包含"nsp"。

  • 令牌完整性代码。

这里标记可能未加密。



更改赞助商实体

字段:

  • 令牌版本。

  • 服务ID这允许自动处理令牌。

  • 操作标识符:"cse"。

  • 时间戳。

  • 生成器应用程序标识符。

  • 用户的帐户定位器。

  • 与用户帐户相关联的赞助商实体的帐户定位器。 如果用户未指定赞助实体,则这里字段包含"nse"。

  • 令牌完整性代码。

这里标记可能未加密。



更改付款延迟

字段:

  • 令牌版本。

  • 服务ID这允许自动处理令牌。

  • 操作标识符:"cpd"。

  • 时间戳。

  • 生成器应用程序标识符。

  • 用户的帐户定位器。

  • 付款延迟如果用户没有指定付款延迟,则这里字段包含"npd"。 出于安全考虑,一旦设置了支付延迟,它只能增加( 未降低)。

  • 令牌完整性代码。

这里标记可能未加密。



更改继承触发器时间

字段:

  • 令牌版本。

  • 服务ID这允许自动处理令牌。

  • 操作标识符:"citt"。

  • 时间戳。

  • 生成器应用程序标识符。

  • 用户的帐户定位器。

  • 继承触发器时间段。

  • 令牌完整性代码。

这里标记可能未加密。



更改显示付款历史记录

字段:

  • 令牌版本。

  • 服务ID这允许自动处理令牌。

  • 操作标识符:"csph"。

  • 时间戳。

  • 生成器应用程序标识符。

  • 用户的帐户定位器。

  • 如果历史记录必须显示,则为"sh",如果要隐藏,则为"hh"。

  • 令牌完整性代码。

这里标记可能未加密。



更改继承者

字段:

  • 令牌版本。

  • 服务ID这允许自动处理令牌。

  • 操作标识符:"ci"。

  • 时间戳。

  • 用户的帐户定位器。

  • 继承的收件人的帐户定位器。

  • 收件人帐户收到的继承份额数。 如果是 0,则必须从用户帐户中删除继承者帐户。

  • 令牌完整性代码。

这里标记可能未加密。

有关详细信息,请参见继承 inheritor。



登录帐号

字段:

  • 令牌版本。

  • 服务ID这允许自动处理令牌。

  • 操作标识符:"la"。

  • 时间戳。

  • 用户的帐户定位器。

  • 令牌完整性代码。

这里标记可能未加密。



付款

字段:

  • 令牌版本。

  • 服务ID这允许自动处理令牌。

  • 操作标识符:"mp"。

  • 时间戳。

  • 用户的帐户定位器。

  • 付款收件人的帐户定位符。

  • 付款仲裁人的帐户定位器。 如果用户没有指定仲裁器,则这里字段包含"na"。

  • 要支付的货币的NAME。

  • 要支付的货币的数量。

  • 令牌完整性代码。

这里标记可能未加密。



安装订阅

字段:

  • 令牌版本。

  • 服务ID这允许自动处理令牌。

  • 操作标识符:"ss"。

  • 时间戳。

  • 用户的帐户定位器。

  • 付款收件人的帐户定位符。

  • 要支付的货币的NAME。

  • 要支付的货币的数量。

  • 两个连续付款之间的时间间隔。

  • 支付付款的次数。

  • 令牌完整性代码。

这里标记可能未加密。

有关详细信息,请参阅订阅



更改管理员操作

字段:

  • 令牌版本。

  • 服务ID这允许自动处理令牌。

  • 操作标识符:"caa_aa"。

  • 时间戳。

  • 用户的帐户定位器。

  • 新管理操作的收件人的帐户定位符。

  • 新管理操作的标识符,用逗号分隔。

  • 令牌完整性代码。

这里标记可能未加密。



停止服务

字段:

  • 令牌版本。

  • 服务ID这允许自动处理令牌。

  • 操作标识符:"ss_aa"。

  • 时间戳。

  • 用户的帐户定位器。

  • 令牌完整性代码。

这里标记可能未加密。



重启服务

字段:

  • 令牌版本。

  • 服务ID这允许自动处理令牌。

  • 操作标识符:"rs_aa"。

  • 时间戳。

  • 用户的帐户定位器。

  • 令牌完整性代码。

这里标记可能未加密。



锁定服务

字段:

  • 令牌版本。

  • 服务ID这允许自动处理令牌。

  • 操作标识符:"ls_aa"。

  • 时间戳。

  • 用户的帐户定位器。

  • 令牌完整性代码。

这里标记可能未加密。



解锁服务

字段:

  • 令牌版本。

  • 服务ID这允许自动处理令牌。

  • 操作标识符:"us_aa"。

  • 时间戳。

  • 用户的帐户定位器。

  • 令牌完整性代码。

这里标记可能未加密。



锁定帐户

字段:

  • 令牌版本。

  • 服务ID这允许自动处理令牌。

  • 操作标识符:"la_aa"。

  • 时间戳。

  • 用户的帐户定位器。

  • 要锁定的帐户的帐户定位器。

  • 令牌完整性代码。

这里标记可能未加密。



帐户解锁

字段:

  • 令牌版本。

  • 服务ID这允许自动处理令牌。

  • 操作标识符:"ua_aa"。

  • 时间戳。

  • 用户的帐户定位器。

  • 帐户的帐户定位器被取消锁定。

  • 令牌完整性代码。

这里标记可能未加密。



锁增加平衡

字段:

  • 令牌版本。

  • 服务ID这允许自动处理令牌。

  • 操作标识符:"lib_aa"。

  • 时间戳。

  • 用户的帐户定位器。

  • 帐户的帐户定位器,余额可能不再增加。

  • 令牌完整性代码。

这里标记可能未加密。



解锁增加平衡

字段:

  • 令牌版本。

  • 服务ID这允许自动处理令牌。

  • 操作标识符:"uib_aa"。

  • 时间戳。

  • 用户的帐户定位器。

  • 帐户的账户定位器,它的余额可以从现在开始增加。

  • 令牌完整性代码。

这里标记可能未加密。



增加余额

字段:

  • 令牌版本。

  • 服务ID这允许自动处理令牌。

  • 操作标识符:"ib_aa"。

  • 时间戳。

  • 用户的帐户定位器。

  • 已经修改余额的收件人的帐户定位符。

  • 余额必须增加的账户单位数量。

  • 令牌完整性代码。

这里标记可能未加密。



降低余额

字段:

  • 令牌版本。

  • 服务ID这允许自动处理令牌。

  • 操作标识符:"db_aa"。

  • 时间戳。

  • 用户的帐户定位器。

  • 已经修改余额的收件人的帐户定位符。

  • 余额必须减少的账户单位数量。

  • 令牌完整性代码。

这里标记可能未加密。



加密令牌格式

加密令牌具有以下字段( 由标记字段分隔符分隔):

  • 令牌版本。

  • 服务ID这允许自动处理令牌。

  • 服务 public 密钥标识符。

  • 加密数据。

服务必须接收到加密或者未加密的令牌。 如果令牌的字段正好 4个字段,则将它的加密;第三个字段是服务密钥标识符的public。

RSA padding 为 PKCS#1 v1.5.



签名的文档格式

AxiomaticTokenizer可以处理已经签名的文档。

签名文档的格式如下:

  • "**********开始AxiomaticTokenizer文档 **********" marker,它分隔已经签名文档的开头。

  • 已经签名的文本。

  • 用于分隔文档签名开头的"。-------------------开始签名 ------------------ -"marker。

  • "Version= [?] ;"签名文档的版本。

  • "Type= [?] ;签名的类型。

  • "FFA= [?] ;这是用于生成文件指纹的算法的NAME。 目前只支持弹出窗口。

  • "ServiceName= [?] ;"创建签名文档的服务的NAME。

  • "ServiceSeed= [?] ;"创建签名文档的服务的种子。

  • "KeyId= [?] ;"用于签名文档的非对称签名密钥的to。

  • "Time= [?] ;"文档签名的时间。

  • "Salt= [?] ;"用于随机化签名的salt。

  • "TextSize= [?] ;已经签名文本的大小。

  • "Value= [?] signature签名值,作为十六进制文本。

  • 用于分隔签名文档结尾的***********结尾AxiomaticTokenizer文档 ***********" marker。

可以用任何文本替换"[?]"占位符。

以下是可用的签名类型:

  • 身份验证.

  • 验证 AxiomaticTokenizer。

  • 导入自服务信息。这不允许导入的服务信息具有"导入任何服务信息"允许的签名类型。

  • 导入任何服务信息。

任何未知的签名类型都被视为"身份验证"。

时间由以下串联的文本时间信息构成,这些信息以UTC坐标表示:

  • 年,4位数字。

  • 月,2位数字。

  • 月,2位数字。

  • 破折号。

  • 小时,2位数字。

  • 分钟,2位数字。

  • 秒,2位数字。

你可以使用 AxiomaticTokenizerKeyGen 签署文档。



例子

********** 开始AxiomaticTokenizer文档 **********

AEB 00F 2 B4 25A DD2 A77 D23 AA8 5 FFD FFD ABF ABF B

-------------------开始签名 --------------------

Version=1 ;

Type=Authenticate AxiomaticTokenizer ;

FFA=BckSha256 ;

ServiceName=AxiomaticTokenizer ;

ServiceSeed=CO6OS5PKPS57N948OV5J ;

KeyId=S1 ;

Time=20081226-132653 ;

Salt=C8F 5CF E3F 62C 0 D2 CA0 B6 ;

TextSize=85 ;

Value=01B A5E 3 F3 E76 8 D2 BCE C92 E0F BA9 CAF 59C 7 A9 80D 91 F 9 B7 0AF 35 F 045 5 A8 C51 85A 64 D D9D 30C 748 25E 63 D 425 9E8 377 ACA E2A 6CE FFA 269 69C 09 C 1FD E47 B24 8 B2 C97 1 A9 CB3 67A FCD C82 2FF B68 23E A17 144 AF2 366 0DA DF2 706 480 A92 498 D44 06B F63 67E 9 CC 3E9 8CB 804 652 00B 073 030 40F 6 C1 8E7 6CE 79 A 717 D6B EBC 15A 918 845 425 5E8 20E 352 835 897 FB7 F1A 646 FC1 603 82B 856 BEB E6A E90 A45 94F E64 8 C1 83A A72 E9F 5EA C7B 098 A40 1 B4 CDF 41C 381 995 BBE E5E A7D 874 5DF 0 B4 6BC 80 D 00E E23 14E EC9 01E 74 A 1 F9 47B F62 BEF 957 868 028 0 A6 F18 B2F 78E 5 FA 431 CB8 1 D8 851 D32 CEB 755 CA6 FAA 20C BAD 71D 2 BC 721 C84 CEA EE7 F71 6 B3 7 B8 0E7 ADC A7D 5 A1 531 149 54C DDC 0BA 0 D ;

*********** 结束AxiomaticTokenizer文档 ***********



弱点



密码短语强度

所有令牌的安全性取决于用户的口令密码和小偷是否可以截获未加密的令牌。

如果短语是弱的,就像一个单词,一个可以拦截令牌的小偷可以使用所有已经知的数据。

由于AxiomaticTokenizer是用JavaScript编写的,因为在JavaScript中编写的迭代哈希比在本机代码( C ) 中编写的迭代哈希慢几倍。 这使得字典攻击更加容易。

因这里,使用强密码是很重要的,如AxiomaticTokenizer文档中所指定的,由记忆的部分和书面部分组成。 当然,有人可以能很容易获得密码的编写部分,但这几乎不可以能远程执行。 记忆的部分使书写的部分在它自己的。



数据库

服务必须在用户提供共享密钥时存储这些共享密钥。 因为每次请求执行操作时,由于用户不发送共享密码,因这里不能将它们散列为密码。

这意味着可以读取( 已经解密) 数据库的小偷可以从所有账户窃取所有数字货币,但显然这是服务所面临的最后一个问题。

服务可以从这样的事件中恢复。 有关详细信息,请参见



选择种子

为了使攻击者在与用户密码相关联的共享机密和帐户名称相关联的共享密钥中使用了( 就像密码密码和账户 NAME 搅拌器一样),AxiomaticTokenizer使用的所有种子都被随机选择。

通过滚动两个骰子,然后从axiomatictokenizer的帮助中查找 table,得到种子的每个字符。

然而,当这个标准被广泛使用时,当新的种子被新种子创建时,人们可能会担心选择的种子。

因这里,必须通过 public 进程选择种子,在新的搅拌机版本制作 public 之前没有时间。 实际上,AxiomaticId实体需要一些具有联机状态的主要组织来选择几个字符,这些字符是新种子。

这种机构每次只需掷两次骰子,利用axiomatictokenizer的help映射表生成必要的种子字符。 这些角色必须在这些组织的网站上发布,以便大家看到。

然后,AxiomaticId实体必须通过简单连接所有已经发布的字符来形成新的种子。



集成提示

下面是服务集成的一些技巧。



服务合作伙伴和赞助商实体

服务合作伙伴和赞助实体的实现不得妨碍数据库的分布式功能。

为这里,不得将服务合作伙伴的费用同时添加到它的帐户中。

相反,它们必须被添加到特殊的table 中,并且只能通过服务合作伙伴自动或者手动合并。



用户隐私

为了保护用户的隐私,必须小心。

服务合作伙伴和赞助者实体不能知道用户将它们添加到帐户中,以及支付多少。

用户不能知道是谁将它们作为继承者添加。



令牌时间

为了提高安全性,服务应考虑无效令牌,时间戳小于 7天,超过天,或者超过分钟( 这种错误的幅度是指时钟同步时的情况。)。



多个令牌执行

为了确保令牌只执行一次,就无需验证整个令牌的整个历史,只要验证令牌的时间戳比上次成功执行的令牌( 每个帐户都存储的时间戳)的时间戳要大



强力保护

为了阻止暴力攻击帐户,服务必须在串行或者并行处理过程中处理小于 10 ^ 13 tokens/second/account,,同时返回"无效的令牌完整性代码"。

这为数十年内的最短令牌完整性代码提供了安全性。



AxiomaticTokenizerKeyGen

你可以使用 AxiomaticTokenizerKeyGen ( 包含在附加的归档文件中) 生成标识。解密和签名数据,并生成文件指纹。

你还可以查看附加归档中包含的源代码,以了解如何使用 C# 解密加密的令牌。

AxiomaticTokenizerKeyGen使用AxiomaticId内核。

在生产环境中不使用这里程序。

要生成 axiomatictokenizerkeygen/axiomaticid,需要 Visual Studio 2008专业版和 Windows Mobile 6 SDK。 你可以在 Visual Studio 2005标准中进行小更改以打开解决方案: 在文本编辑器中打开。sln文件,并从第一行("Visual Studio 解决方案文件中更改" 10",格式版本 10.00") 为" 9"。



用法

在签署文档并解密加密令牌之前,必须创建服务初始值设定项( 查看"工作创建服务初始值设定项"菜单)。

在文本编辑器中打开 AxiomaticTokenizer,并使用服务信息("serviceinfos") 搜索 array。

在这里 array 中,添加你自己的服务信息元素或者编辑现有的服务信息元素。

使用"工作剪辑加密 public 密钥M"将你必须粘贴到服务信息元素的"asymmencryptionkey。publicm"字段中的数据复制到剪贴板。

使用"工作剪辑签名 public 密钥M"将你必须粘贴到服务信息元素的"asymmsigningkey。publicm"字段中的数据复制到剪贴板。

在服务信息元素中设置"servicename"。"serviceseed"。" asymmencryptionkey.id"。" asymmsigningkey.id"字段,与创建服务初始值设定项时所键入的值相同。

使用AxiomaticTokenizer保存编辑过的文件并在web浏览器中打开。



解密加密令牌

如果你在AxiomaticTokenizer中选择你刚编辑过的信息,并创建一个加密的令牌。

从剪贴板复制这里标记( 实际上就是包含加密数据的令牌域,最长的),并在AxiomaticTokenizerKeyGen按钮上单击"从剪贴板解密"按钮。 解密的标记将被放置在可见的编辑框中。



验证签名

在AxiomaticTokenizerKeyGen中,在可见编辑框中键入一些文本。

选择适当的签名类型( 只保留默认值)。

单击"标记到剪贴板"按钮以签署键入的文本并将它的复制到剪贴板。

转到axiomatictokenizer的帮助,然后单击"验证文档签名"链接。 现在点击"这里"链接。

将剪贴板内容粘贴到可见编辑框中,然后单击"处理文档"按钮。 跟随向导直到结束。



DotNet源代码

AxiomaticTokenizerKeyGen使用AxiomaticId内核,但是你也可以使用纯DotNet解密加密的令牌。 附件中包含了一个示例应用程序 RsaKeyGen。

下面是加密令牌的解密方法:

RSACryptoServiceProvider rsa = FromRsaKeyParams();string textToDecrypt = TextToDecryptTextBox.Text;
textToDecrypt = textToDecrypt.Replace( "n", "" );
textToDecrypt = textToDecrypt.Replace( "r", "" );
textToDecrypt = textToDecrypt.Replace( "", "" );
byte[] data = ArrayUtil.HexTextToArray( textToDecrypt );
byte[] decrypted = rsa.Decrypt( data, false );string decryptedTokenText = ArrayUtil.ArrayToText( decrypted );

FromRsaKeyParams的实现方式如下:

private RSACryptoServiceProvider FromRsaKeyParams()
{
 RSAParameters rsap = new RSAParameters();
 rsap.Exponent = ArrayUtil.HexTextToArray( RsaKeyParamETextBox.Text );
 rsap.Modulus = ArrayUtil.HexTextToArray( RsaKeyParamMTextBox.Text );
 rsap.D = ArrayUtil.HexTextToArray( RsaKeyParamDTextBox.Text );
 rsap.DP = ArrayUtil.HexTextToArray( RsaKeyParamDPTextBox.Text );
 rsap.DQ = ArrayUtil.HexTextToArray( RsaKeyParamDQTextBox.Text );
 rsap.P = ArrayUtil.HexTextToArray( RsaKeyParamPTextBox.Text );
 rsap.Q = ArrayUtil.HexTextToArray( RsaKeyParamQTextBox.Text );
 rsap.InverseQ = ArrayUtil.HexTextToArray( RsaKeyParamQITextBox.Text );
 RSACryptoServiceProvider rsa = (RSACryptoServiceProvider)RSACryptoServiceProvider.Create();
 rsa.ImportParameters( rsap );
 return rsa;
}



源代码详细信息

当你分析代码时,你可以能认识到你知道或者你可能会看到一种更好的代码编码方式。 但是你必须考虑运行代码的目标平台是移动浏览器的世界,也就是说,应用程序必须在pda上运行。

目标平台的另一个要求是触摸屏。 这个需求会影响用户界面的设计,如使用手指尽可以能多地使用手指。

如果AxiomaticTokenizer是用高级语言( 如 C# ) 编写的,而不是像JavaScript那样使用脚本语言,那么编程机制将是不同的。 在JavaScript的情况下,整个程序都包含在单个文件中,以便使它的下载容易。 由于这种约束,其他编程机制被简化了,因为JavaScript不是类型安全的。 例如,类在小规模上使用;当然,AxiomaticTokenizer的小大小使使用全局声明变得容易。



代码注释

所有组合框项都必须包含一个文本值,该值既不是空的也不是空的。 每个项的显示文本不能为空或者空。

"wipesensitivedata"函数用于覆盖在 RAM ( 作为未分配的变量) 中找到的任何敏感数据。 基本上,大型缓冲区分配了( 被释放),以覆盖垃圾收集的变量。



浏览器检测

检测运行JavaScript应用程序的浏览器是一个棘手的cookie。 许多互联网浏览器想愚弄访问的网站认为另一种浏览器请求HTML页面。

下面是代码:

// Gets the name of the host application, in uppercase.function GetHostAppName()
{
 var appName = navigator.appName;
 appName = (appName!= null)? appName.toUpperCase() : "";
 var userAgent = navigator.userAgent;
 userAgent = (userAgent!= null)? userAgent.toUpperCase() : "";
 if( userAgent.lastIndexOf( "Opera".toUpperCase() ) >= 0 )
 {
 // Check this before InternetExplorer because OperaMobile also contains// the string"Internet Explorer".if( userAgent.lastIndexOf( "PPC".toUpperCase() ) >= 0 )
 return"OperaMobile".toUpperCase();
 elsereturn"Opera".toUpperCase();
 }
 elseif( appName == "Microsoft Internet Explorer".toUpperCase() )
 return"InternetExplorer".toUpperCase();
 elseif( appName == "Microsoft IE Mobile".toUpperCase() )
 return"InternetExplorerMobile".toUpperCase();
 elseif( userAgent.lastIndexOf( "Safari".toUpperCase() ) >= 0 )
 return"Safari".toUpperCase();
 elseif( userAgent.lastIndexOf( "Mozilla".toUpperCase() ) >= 0 )
 {
 // This has to be checked last because many Internet browsers contain it.return"Mozilla".toUpperCase();
 }
 elsereturn""; // Unknown host application.}

然后,我们只需要检查这里函数返回的文本:

function IsBrowserInternetExplorer()
{
 return GetHostAppName() == "InternetExplorer".toUpperCase();
}



端口

通常,编码以及用户界面,必须调整,以提供对移动平台的访问。

例如,可以通过动态更改样式表( 使用 document.stylesheets array ) 来完成颜色调度,但是这不能在移动浏览器中完成。 幸运的是,CSS提供了一种方法: 任何HTML元素的多个类名,例如

<input
type="submit"class="ButtonStyle
ChocolateCream_ButtonStyle"/>

HTML和JavaScript主机的实现使调试有时变得困难。 举个例子,在 IE Mobile 6上,尝试显示或者设置带有空对象的显示文本会导致异常,但在其他的网络浏览器中工作。 另一个例子是,在 IE 移动 6中,array 项目末尾的逗号生成一个空项,但它的他浏览器中没有项。

很有趣的是,尽管AxiomaticTokenizer大小大,移动浏览器加载它并能很好地与( 虽然比浏览器的桌面版本慢得多) 一起工作。

我担心的是移动设备上的大整数库的速度。 尽管RSA加密的性能不在桌面浏览器的任何地方,但它是可以接受的。 例如在带有 400微处理器的PDA上生成一个加密的令牌,在一个PDA微处理器上,需要大约2 秒钟的时间。



配色方案

实现配色方案的最佳方法是不更改每个可视HTML元素的颜色,也不指定带有所有需要有颜色方案的HTML元素的名称。

使用CSS功能实现配色方案: 任何HTML元素的多个类名,例如

<input type="submit"class="ButtonStyle ChocolateCream_ButtonStyle"/>
基本上,颜色已经与它的他CSS属性( 比如大小或者字体) 分离,以允许所有颜色方案的字体。

现在,我们需要做的就是更改配色方案的类名,也就是说,用当前颜色方案( 例如 PaleBlue_ButtonStyle ) 替换 ChocolateCream_ButtonStyle ( 这是默认的颜色方案),就像这样:

var colorSchemeName = colorSchemeNameArg.toUpperCase();var prevColorSchemeName = FindPreviousColorSchemeName( className );
className = className.toUpperCase();if( (prevColorSchemeName!= null) && (prevColorSchemeName!= "") )
{
 prevColorSchemeName = prevColorSchemeName.toUpperCase();
 // Change the widget's CSS class.if( className.indexOf( prevColorSchemeName ) >= 0 )
 widget.className = className.replace( prevColorSchemeName, colorSchemeName );
}

要更改所有HTML元素的配色方案,我们需要使用 document.all array 循环遍历页面中的所有HTML元素。 由于某些原因,无法使用 foreach 进行迭代,无法从 array 获取项数,但是在获取空项时可以执行:

var i = 0;while( true )
{
 var widget = document.all[ i ];
 if( widget == null ) return;
 // Do stuff. i++;
}

要注意 document.all 通常需要字符串参数,这是访问HTML元素的ID,但是你可以看到,它也可以用于访问 array 中指定索引的HTML元素。



向导,像用户界面

像用户界面这样的向导是最容易使用的用户。 同时,它也是最难以开发的。 由于AxiomaticTokenizer是专门为移动设备而设计的,而不是桌面计算机,像用户界面的向导最适合。

由于整个用户界面包含在单个文件中,因此当应用程序启动时,所有HTML元素都将可见,除非它们是专门隐藏的:

<divclass="FrameStyle" id="DebugFrameRow"style="display: none;">

当应用程序启动时,必须显示的唯一HTML元素是框架(

<divclass="FrameStyle" id="ApplicationFrameRow">
) 和表示JavaScript不工作的元素,
<divclass="ContentRowStyle CenteredStyle
ChocolateCream_ContentStyle" id="NoJavaScriptRow">
)。后一个HTML元素用于简单地告知用户JavaScript没有在他的计算机上工作,并且需要。

从应用程序开始时,HTML元素只以编程方式显示,在页面上组织。 除了第一页,欢迎页面,所有它的他页面在用户单击按钮( 或者与HTML元素进行交互) 时显示。

为生成令牌所用的数据的页面,显示一个可以编辑的HTML元素,以便在填充令牌所需的数据。

由于AxiomaticTokenizer是一个简单的应用程序,向导页面上只有两个全局按钮,一个移动到下一步,一个终止当前向导的( 然后回到主菜单)。

向导启动一个方法( StartWizard ),该方法接收作为参数 array的参数,以及用户完成向导( 这里函数通常生成一个标记并显示它) 时执行的JavaScript函数。



翻译

翻译对于全球应用非常有用,尤它的对于一个目标是大众的应用程序,而不是通用的计算机用户。

因为AxiomaticTokenizer是一个简单的应用程序,所以翻译完全是在应用程序启动时或者用户改变当前语言时完成的,而不是在页面显示的时候。

之前,我们需要设置包含翻译文本的资源,在本例中是 LocalizedTexts array。 这个 array 元素包含 ID ( 在 array 中进行搜索)。显示文本的语言。翻译( 这只用于自动翻译。) 中的HTML属性。实际翻译的显示文本。格式化数据元素。格式文件。 每个格式数据元素的位置在翻译的文本中标识为通常的C 样式,带有"{}"的索引占位符。

就像颜色方案的情况一样,为了翻译用户界面,我们需要遍历所有的HTML元素,使用 document.all array。 然后,我们使用翻译的文本来改变每个元素的显示。 所有这些都是由 SetLocalizedGui 函数自动完成的。 当当前语言发生更改时,翻译是如何发生的:

var langId = document.all[ "LanguageNameComboBox" ].value;
SetCookie( LangIdCookieName, langId );
SetLocalizedGui( langId );// Localize the header of the welcome page because its text is dynamically set, and it// is on the same page where the language is changed.document.all[ "PageHeaderRow" ].innerHTML = FindCurrentLocalizedText( "Welcome", null );// Localize the"Choose service name" item because the widget which contains it is// dynamically filled, and it is on the same page where the language is changed.UpdateComboBoxByIdItem( "ServiceNameComboBox", GenericItemValue_Choose
, FindCurrentLocalizedText( "ChooseServiceNameItem", null ) );// Localize the service actions because the widget which contains them is// dynamically filled, and it is on the same page where the language is changed.ShowServiceAction();

但是,有时可能需要手动设置HTML元素的显示文本,例如当组合框的内容以编程方式填充时。 在这种情况下,我们需要调用 FindCurrentLocalizedText 函数。 这将在 LocalizedTexts array 中搜索当前语言中的翻译文本。 这里函数还接受格式化数据。 下面是如何完成HTML元素的手动翻译:

document.all[ "PageHeaderRow" ].innerHTML = FindCurrentLocalizedText( "Welcome", null );

以下是如何完成格式化数据的手动翻译:

var extractedChecksum = GetAccountNameChecksum( accountNameArg );var accountName = BlendAccountName( accountNameArg, serviceNameArg );var computedChecksum = ComputeAccountNameChecksum( accountName.toUpperCase() );if( extractedChecksum.toUpperCase() == computedChecksum.toUpperCase() ) returnnull;elsereturn FindCurrentLocalizedText( "InvalidAccountNameChecksum", [ extractedChecksum, computedChecksum ] );



q&

数字检查的要点是什么?

数字检查有几个非常有用的特性。

你可以在没有连接到互联网的电脑上写支票,因此你的密码和你的钱更安全。

你可以在网上商店的购买单上签支票。 你不必发送支票到付款服务,商店做它并收回确认( 所以,你不必证明付款,并且没有商店员工必须验证付款- 它是全自动的。)。 你还可以更有效地从支付服务中隐藏你的IP地址,因为你需要更少地访问它。

检查可以通过任何通信方式发送到支付服务,如 SMSs ( 付款的公理化令牌一般为 95个字符,因此它们适合于SMSs的160个字符限制)。

支付服务对DDOS攻击更有弹性。 服务可以设置任意数量的public 代理,这些代理将令牌发送到( 隐藏) 服务。



我应该如何选择密码短语?

选择AxiomaticTokenizer文档时,选择它是非常重要的。



可以在在线支付服务上部署

是的这是一个通用系统。 但是,这仅仅是客户端,用户界面。 在线支付服务必须实现服务器端,即解析传入令牌并在数据库中执行请求操作的代码。

有关详细信息,请参见



我可以在购物网站的购买形式中加一个标记?



我看到一些代理网站向服务发送令牌,以帮助减轻DDOS攻击。 我可以通过这样的代理发送令牌?



我不确定我上次支付的金额是否为真。 是否可以使用相同的付款信息生成新的令牌?

不只要重新发送相同的令牌,直到收到来自服务的执行证明。 如果你收到"成功"执行证明,则保证已经成功执行付款。

除非你想进行新付款,否则生成具有相同付款信息的其他令牌。



某个原因,我一小时前生成的令牌没有达到服务;或者它可能有,但我不确定,这是什么。 如果最终到达服务,我如何确保它被忽略?

生成另一个令牌( 例如登录) 并将它的发送到服务( 直到你收到来自服务的执行证明)。 如果从服务接收到"成功"或者"lastexecuted"执行证明,则旧标记将不会执行,如果之后达到服务。



为以后访问帐户而保存的信息以保存?

无。AxiomaticTokenizer是无状态的,即,它不需要保存的信息来访问帐户。 用户必须记住或者存储他的帐户名和密码短语。

如果丢失了具有AxiomaticTokenizer的设备,则它的所有者的所有帐户仍可以访问它的他设备。

用户可以选择使用AxiomaticTokenizer保存不同的帐户名称。



我怎么不记得密码短语?

根据AxiomaticTokenizer文档中的建议选择你的密码短语。

如果你认为有必要别让任何人获得你的数字货币,刻录或者吞吞那些口令。



我有一个秘密账户。 因为它的秘密,它的密码在任何地方都没有被备份。 如果我忘记了它的密码,我怎样才能确保我不会丢失我所在的钱。

对于这里帐户,添加作为它的密码短语已经备份的public 帐户的帐户。

如果你忘记了密码帐户的密码,当进入继承模式时,所有的数字货币将移动到你的继承者 public 帐户。



有可能有人会在我的密码短语上挂上一个强力攻击?

,Generally是,因为你将令牌发送到各种实体,比如在线商店可以根据令牌完整性代码装载攻击,或者支付基于接收者的令牌引用代码( 由服务在帐户中保存)的攻击。

这就是为什么在AxiomaticTokenizer文档中建议你选择密码的原因很重要。

为了进一步保护你自己,请始终保存与你的public 帐户不同的密码帐户中的大多数数字货币。 这样,你的令牌就不会到达另一个实体。



绝对没有多少安全( 提供者基于,用户级硬件等。) 可以克服用户对社会工程con的access。

AxiomaticTokenizer是为那些想要保护资金的人提供技术解决方案的途径,而这些技术又是为了。

人们选择做的事是他们的选择,而不是 AxiomaticTokenizer。



因为我不能键入小号字母和大字符,而且像这样的特殊字符,所以密码短语还是不够安全。

拥有更多字符的池并不安全,但是它可以使用相同的强度创建更短的密码短语。

密码密码的强度与可以在它的中使用口令的字符池的组合数量成正比。

给定数量的组合可以实现一个的characters字符。 区别在于密码短语的大小。

使用较短的密码句可能更实用,但是密码句也必须输入。 如果只使用字母数字字符,编写短语会容易得多,这样就可以补偿更大的大小。

17个字符由 72个字符组成,与由 20个字符组成的组合的组合数量相同,实际上是个字符的组合;实际上,这是多个。 因这里,只有 3个字符 LESS,用户必须使用Shift键,平均,8.5次,在键盘上搜索特殊字符。

而且,非字母数字字符会在记忆中产生问题。 有时人们会在密码短语中无意中键入特殊字符甚至两次。 大写也是一个问题。



历史

AxiomaticTokenizerKeyGen 创建的数字签名可以进行验证。

15.11.2008 - 新增基础设施以验证数字签名。 将来,新的服务操作将允许用户验证由服务签名的小文本签名。

新增了 4个新的管理操作。

- 添加了服务管理操作 web服务操作组合框"显示基本动作"/"显示管理员操作"中的项目允许用户在基本操作和管理操作之间进行 switch。

这是一个由用户选择的组合框,用户可以从一个组合框中选择一个来查看它的意义。

添加了一个服务操作,以恢复已经危及的服务服务。

为一个服务的哈希生成了一个服务操作,15.10.2008 增加了一个服务操作。

- 文本散列一般以radix表示。

服务内部 NAME 现在是服务种子。

某些散列(。例如密码密码混音器和令牌完整性代码的那些) 现在是苹果机。 理论上,这不是必需的,因为标记具有固定的格式,但只是。

所有令牌都有一个服务标识字段来帮助自动处理。 令牌提交表单现在可以自动选择处理 weblink。

- 执行证明可以用于所有令牌。

发表文章至 CodeProject。


Axiom  
相关文章