IOTA极客马拉松: 欺诈检测 (第二部分)

IOTA极客马拉松: 欺诈检测 (第二部分)

本文是“Freedom Pass”团队在IOTA极客马拉松活动经历的第二部分内容。在第一篇文章中,Kira介绍了相关背景,并解释了伦敦自由通行证现存的问题。在这篇文章中,我们将更详细的介绍如何搭建这个项目。

免责声明:尽管提到欺诈检测与预防时,一般人都会联想到机器学习或数据科学等方面,然而此项目却主要使用IOTA的技术基础,与前面提到的技术并无关联。

在我们将项目实现范围充分缩小到我们认为可以在马拉松活动中实现之后,我们开始逐渐熟悉IOTA缠结。早前几周,我们遵循教程生成了一个简单的事务,并且按照需求对它做了修改。在我们熟悉缠结的一些通用概念后(许多内容来自IOTA的Chris Dukakis写的Q&A和介绍展示),我们接入一个测试网络节点,开始发布事务。

在深入了解这个项目的细节之前,我将简要介绍一下是否要运行完整节点,IRI(IOTA Reference Implementation)或是连接之前存在的节点。简单说,为了运行IRI,需要完整的Java Runtime Environment,而这也是目前IOTA尚不能运行在物联网设备上的原因之一。每一个连接到缠结的节点,都公开了一个HTTP API,通过这个API可以发布交易事务。为了建立起IRI实例,必须获得已经连接到缠结节点的地址。我们建议去slack的nodesharing频道问他人要一个节点,因为时间关系与前面提过的一些限制原因,我们认为没有必要运行一个属于我们自己的节点。

继续回到解决伦敦自由通行证的欺诈问题之中。

我们决定使用JavaScript库,因为它在API顶层执行了大量繁重工作,并且是到目前为止文档最完善的库。(获胜的团队大部分使用了没有文档的Python库,并且仍然能够相当顺利的与缠结互联)。iota.lib.js既实现了标准API,也实现了一些有用的功能,比如签名、单元转换和读取缠结信息。在我们的项目中,我们已经开始提供缠结与用户之间的下列交互:

  1. 在缠结中注册医生属性的种子
  2. 在缠结中注册申请人属性的种子
  3. 在每一对注册的医生和申请人之间执行事务。
  4. 确认已经注册在缠结网络的医生和申请人之间产生的证明。
  5. 在缠结网络读取所有医生发送事务的信息。

考虑到上述功能,我们如何将现有的IOTA库利用到极致呢?既然目前智能合同或大多数高级事务在IOTA上都暂不可实现(正在开发中),我们将需要一些脱离缠结的流程、存储和UI。

为此,我们实现一个后台和一些封装程序来处理申请信息。服务器端使用Node.JSexpress-framework编写。为了对数据库的逻辑和结构进行建模,我们使用了MongoDBmongoose。MongoDB包含一个简单的键值存储,保存了相关申请人的信息。可以设想,它将其升级为一个图表模型,以便更好的映射缠结的结构,并更有效的分析医生和申请人之间的联系状况,然而,这种升级的耗时超过了我们仅有的24小时编码时限。

为了让用户轻松的与缠结交互,我们构建了一个小型的web前端。它允许用户输入有关申请的信息,如申请人的社保账号、医生和申请人的邮编、电话号码等。在这个阶段,将触发以下四件事:

  1. 输入的信息保存在MongoDB-collection中。
  2. 基于识别信息的总和为医生与申请人创建种子。
  3. 生成测试用的新代币并发送至医生账户。
  4. 从医生到申请人发起一次IOTA事务。

为了将信息保存到MongoDB-collection中,控制器实例化并返回包含刚刚输入数据的新模型。并将它传递给处理来自客户端http请求的server.js

并没有专门的IOTA API调用程序来生成种子,但是他们提供一个命令行来生成一个随机种子。我们通过将私钥与申请人的社保号码以及医生的ID联系起来,使我们的种子与私人信息相关联。并在生成种子之后,为每个新事务创建一个新的地址。

为了更有效的实现iota.lib.js中的功能,我们在Promises中封装了现存的基于回调的结构。这使得我们的代码变得更加异步化,实现“开箱即用”的效果。

下面是架构的概述:

"Freedom Pass"系统架构

一旦数据和事务被发布出来,下一步就是提供一种方法用来查看现有的申请和证书。因此,我们创建了UI的第二页,用于列出从MongoDB-collection中读取的所有申请的相关信息。

输入医生和申请人数据的UI

然而,提供这种方式用来找出欺诈产生的主要原因,即申请人重复使用医生信息。这种类型的欺诈表现为某个医生发布了数量异常的证书。这种情况非常容易理解,任何人都会想到,但是考虑到目前证书发布的方式是一个完全模拟化的过程,通过不同区域的不同管理人员查看医生证明而完成,完全无法杜绝欺诈行为,所以不断累积出了大量的虚假申请。这正是我们任务中所关注的欺诈类型。

那么,我们该用怎样的友好方式来标记被核查的申请情景呢?我们选择了最简单的方法,创建了UI的第二个视图,系统中每个医生都列出了他们所认证证书数量。在认证一定数量的证书之后,列表被重新排序。让我们想象一下,让它变得更聪明一点,增加证书颁发的日期,并创建具有时序区别的证书,但因为马拉松的时间受限,我们并没有实现它。如果医生认证的证书超过10张,就会用红色标出。一种非常简单但却又有效的沟通方式,让用户知道需要对某些证书进行调查。当然,10张证书的标记完全是任意的,可以选择不同的标准。事实上,要定下来这个数字,首先要分析历史数据。

医生认证证书的清单

综上所述,Freedom团队发现了很多乐趣,在短时间内学会了大量关于IOTA、思维能力、合作和创新等方面的知识技能。我们设法构建并证明了利用IOTA安全发布医疗证明,以杜绝和侦测欺诈行为的功能。对申请自由通行证的任务就是这样完成的,这种方式非常容易理解与实现。但这并不意味着它所使用的基本框架不能用于其他目的,事实上,它是专门针对一般类型的欺诈行为,在其他领域也很用处。

这是唯一能解决这个问题的方法吗?不是!

这是最简单的解决方法吗?更不是!

然而,我们相信,只有通过实验和利用少数具有可扩展性的分布式账本技术才能解决方案,我们才能达到良好的适用状态。一般来说,对于使用分布式账本技术才能实现的功能,在不使用分布式账本技术的前提下,是很难完成的,因为它会带来巨大的财务、组织以及信任成本。IOTA是一个非常低成本高效能和可扩展性的解决方案,但需要注意的是,它还处于起步阶段。

IOTA极客马拉松: 欺诈检测 (第二部分)
在IOTA极客马拉松的"Freedom Pass"团队

原文链接:http://datarella.com/iota-hackathon-lessons-learned-fraud-detection-part-2/

tigermumu

专栏作者:tigermumu

个人简介:坚定不移的贯彻以推广和普及IOTA为核心一百年不动摇

作者邮箱 作者主页 Ta的文章

发表评论

邮箱地址不会被公开。 必填项已用*标注