放心用吧!浅谈DuerOS的安全性

简介: 放心用吧!浅谈DuerOS的安全性


“我们每个人都是安全工作者”(参见关于软件开发,都应该知道的10个常识), 这绝不是一句戏言。在人工智能智能领域,安全同样是一个重要的话题。AI操作系统要保证系统的安全性,那么基于AI操作系统的开放平台同样要保证安全性。

基于DuerOS 的小度系列音箱是否安全?基于DuerOS开发的技能服务是否安全呢?

小度系列音箱的安全性

很多朋友问我,“使用小度音箱是否安全呢?它是不是总在监听我说话呢?”。

智能音箱场景下的性能优化》一文中描述了智能音箱的工作原理,音箱的唤醒和语音识别是两个部分。当用户说“小度小度”唤醒词的时候, 这部分的语音识别是在音箱本地进行的,也就是音箱自身的AI部分, 当唤醒完成之后,用户的语音才会传到DuerOS的云端,完成语音识别,自然语言处理等等。举个例子, 大家在一个屋子里聊天, 很多声音你可以充耳不闻,当我说“小明,小明”,小明才会意识到我要和他说话,对我接下来的对话进行响应。

因此,智能音箱并没有将用户的语音都进行云存储,只有在用户要求音箱响应的时候才做出来,是相对安全的。

至于智能音箱其他方面的安全性都是要遵守各种国家规范的,就小度系列音箱而言, 有着严格的准入准出机制,包括显式/隐式接口,存储芯片,加密等级,固件更新等,基本上可以做到比手机的安全性更好。

DuerOS的安全体系

DuerOS系统的安全性构建在百度整个的安全体系之上,安全体系一般包括六个方面:

  • 物理与环境安全
  • 安全流程管理及相关审计
  • 灾难恢复和业务连续性
  • 云平台安全技术
  • 云客户云安全服务
  • 数据安全

安全架构的核心包括百度智能网关、入侵检测和防御系统,流量清洗系统和漏洞检测系统等,可有效实现防DDoS以及各类网络4、7层攻击等。

百度发布了公司层面的《数据安全策略》,所有数据进行分级保护。所有用户敏感信息,将以最高安全等级“机密”级别进行管理。在处理机密数据资产时,必须遵守机密数据管理流程与技术标准要求。主要包括:

  • 所有的数据有明确的数据owner和管理者,明确数据访问/使用范围,遵循数据访问权限最小化原则。并通过技术手段和相关流程对数据进行安全管理,推动保护措施的实施。
  • 发布明确的制度对机密数据的访问、获取进行管理,包括第三方需求的管理。建立明确的访问授权审批要求且所有审批记录线上化。
  • 各系统或使用者知道明确的数据销毁处理流程,并采用合理的数据销毁技术。
  • 对机密数据管理执行定期审核。
  • 所有承载、存储机密数据的系统,必须具备4A基本要求(Account、Authentication、Authorization、Audit)。机密数据的访问必须细化到个人,必须有安全的登录机制,所有人的访问已授权且符合最小化原则,所有行为日志记录齐全且远程备份满足可审计。

因此, DuerOS系统自身的安全性是值得信赖的。

DBP技能开放平台的安全性

DBP(DuerOS Bot Platform)是对开发者开放的平台,以通信认证的方式保证DuerOS 系统与第三方服务的安全性。也就是说,在技能服务与DuerOS通信的过程中,双方都需要对接收到的请求信息进行认证,避免接收到恶意攻击者发来的请求,从而保证通信内容安全。

在传输层面,技能服务必须使用HTTPS进行通信,以保证通信内容的传输安全。应用服务层面的安全性采用的是双向认证。

双向认证——DBP请求第三方服务

当DuerOS向技能发送请求时,技能需要对发来的请求进行验证,验证过程如下:

  1. 从http head的signaturecerturl地址里面下载权威签名证书,然后从签名证书中获取公钥。
  2. 从http head中获取signature信息,并用base64解码signature得到str1。
  3. 通过公钥和str1解密得到sign1。如果解密成功,继续验证。如果解密失败则拒绝请求。
  4. 使用sha1计算消息body的内容得到sign2,并与sign1进行比较,如果一致则继续验证,如果不一致,则拒绝请求。
  5. 比较request请求消息中的timestamp字段与系统当前的时间,如果两者差值小于180秒,则认为当前请求合法,对请求进行处理。如果两者差值大于等于180秒,则拒绝请求。

验证过程中的2-4步可以使用rsa_verify函数代替。下图展示了DuerOS生成签名过程和技能验证签名的过程。

双向认证——第三方服务请求DBP服务

当DuerOS收到技能发送的请求时,需要对技能发来的请求进行验证,验证步骤如下。

  1. 从http head中获取signature,并进行base64位解密获得str1。
  2. 从DBP平台上获取技能的公钥,并将公钥与str1通过解密获得sign1,如果解密失败则拒绝请求。
  3. 将body、botId、timestamp三个字符串按顺序连接成str2,并对str2生成摘要sign2,比较sign1与sign2是否相同,如果不同则决绝请求,如果相同,则继续验证。
  4. 比较请求消息中的timestamp字段与系统当前时间,如果两者差值小于180秒,则认为请求合法,对请求进行处理。如果两者差值大于等于180秒,则拒绝请求。

DuerOS验证签名过程中的2-3步可以使用rsa_verify函数代替。下图展示了技能生成签名过程和DuerOS验证签名的过程。

生成公私钥的RSA方法

RSA方法生成的公钥和私钥是成对出现的,在DuerOS与技能通信过程中起着重要的作用。可以采用OpenSSL来生成RSA的公私钥,私钥的生成示例如下:

genrsa -out rsa_private_key.pem 1024

根据私钥生成公钥的方式如下:

rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

没错, 和我们在其他环境中的应用没什么两样。

当然,如果采用了CFC的形式进行部署,DBP 平台已经完成了上述功能,无需开发者显示操作。

用户隐私与账户管理

安全性中的一个重要方面是用户隐私,在DuerOS中所有涉及用户隐私的操作都要用户的显式授权,例如位置信息,录音,支付等等。例如技能向用户推荐附近的美食时需要知道用户的地址信息,向用户邮箱推送用户关注的资讯时需要用户的邮箱信息。技能只有经过用户的授权才能使用用户的信息。

用户授权

技能可以通过向DuerOS发送Permission.AskForPermissionsConsent指令获取用户的权限。当收到用户响应时,DuerOS会向技能发送授权成功或授权失败事件。

Permission.AskForPermissionsConsent指令的协议格式如下:

{
    "type": "Permission.AskForPermissionsConsent",
    "permissions": [
        {
            "name": "{{ENUM}}"
        },
        ...
    ],
    "token": "{{STRING}}"
}

当技能申请用户授权成功时,DuerOS会向技能上报授权成功事件,消息格式如下:

{
    "type": "{{STRING}}",
    "requestId": "{{STRING}}",
    "timestamp": "{{STRING}}",
    "token": "{{STRING}}" 
}

如果技能需要用户授权的数据,必须在DBP 平台的技能描述进行显式选择。为了保护用户数据,技能在使用用户数据信息必须满足以下条件。如果发现技能违背了下面的原则,DuerOS有权下线技能,并通知开发者对技能进行修改。

  • 技能必须满足DuerOS隐私政策。
  • 技能只有在提供服务时才能使用用户信息。使用用户信息时,必须告知用户使用范围,在用户同意并且不违背用户隐私和法律的情况下使用。
  • 技能使用用户信息,包括用户的昵称、邮箱、电话、头像等,都必须通过向DuerOS发送请求消息来获取,不能将用户的信息本地存储。
  • 技能每次提供服务时,必须使用API接口请求用户最新的信息。

账户关联

另一类典型的授权需求是账户关联,需要将用户的DuerOS账号与已有应用系统的账户进行关联,以获取应用系统的信息。DuerOS支持技能将用户的DuerOS账户与用户的其他系统账号关联起来,使技能提供更多的服务。

目前,在DBP技能开放平台上,仅自定义技能和智能家居技能会涉及账户关联功能,内容播报等技能不涉及账户关联。例如,当用户使用一个关于微博内容分享的自定义技能时,如果用户说“小度小度,查看我的关注”,此时技能会为用户展现微博的关注信息。在这个过程中,技能首先需要获取用户在微博账户的授权,然后才能登录用户的微博,获取微博的关注信息并展现。

技能将用户的DuerOS账户与用户的第三方系统帐户关联时,需要第三方系统为该用户账户提供一个访问令牌,以便在第三方系统中唯一地标识用户。DuerOS保存访问令牌,并将令牌包含在发送给技能的请求中。技能使用访问令牌代表用户身份访问第三方系统,通过该系统的身份验证,进而获取到用户在该系统中的信息或者资源。

DuerOS 采用OAuth 2.0的授权码模式完成账户关联,过程如下:

  1. 当需要用户授权时,会在屏幕或app(无屏设备启用技能时)上显示第三方系统的登录页面(即开放平台的填写的授权地址)。技能请求该授权地址时会携带state(必选)、client_id(必选)、response_type(必选)、scope(可选)和redirect_uri(必选)等参数信息。
  2. 用户在第三方系统的登录界面填写账户信息并进行登录授权。
  3. 第三方系统对用户的身份进行验证。通过身份验证后第三方系统会重定向到redirect_uri地址,并附上授权码。
  4. 重定向地址redirect_uri使用授权码向认证服务器(在技能开放平台上填写的token地址)申请令牌。
  5. 认证服务器核对授权码和redirect_uri,确认无误后,向DuerOS发送access token和refresh token。
  6. DuerOS验证返回信息,保存access token和refresh token。

也就是说,当技能应用支持用户使用帐户关联功能时,开发者需要设计、编写登录页面。该页面需要验证用户在第三方系统的登录信息,并返回访问令牌。如用户在技能商店app中启用智能家居技能时,会跳转到技能提供的第三方系统的登录界面。用户登录第三方系统进行访问授权,该页面验证用户的信息是否正确,正确时返回访问令牌。登录页面需要满足以下要求:

  • 基于HTTPS访问。
  • 可以适配不同的设备,包括手机app、各种有屏设备端。
  • 不允许出现任何弹出窗口。
  • 必须接受用户的登录信息凭据,然后对用户进行身份验证。
  • 需要能生成一个授权码code,该code可以传递到技能的授权服务器并返回access token访问令牌。
  • 必须跟踪查询字符串中传递的state值,及原封不动的返回该state的值。
  • 完成用户登录信息验证时,需要重定向到redirect_uri地址,同时携带参数state和授权码code。

当用户禁用技能时,DuerOS将删除技能与该用户关联的访问令牌和刷新令牌,取消该用户的DuerOS账户与用户其他系统账户之间的连接。当用户再次启用技能时,需要重新将用户的DuerOS账户与提供服务的用户账户进行关联。

综上所述,在使用基于DuerOS的各种服务时,无论从设备端,还是AI操作系统,亦或第三方技能服务,都在安全性上提供一定的保证,一句话,放心用吧!

相关文章
|
18天前
|
API
开源剪映小助手(capcut-mate)v3.0.22发布
CapCut Mate API 是开源免费的剪映草稿自动化工具,基于 FastAPI,支持独立部署。为大模型提供开箱即用的视频编辑 Skills,实现剪映核心功能全流程自动化,轻松生成专业视频。兼容 Coze/n8n,支持云渲染。
|
机器学习/深度学习 开发者 数据格式
Gradio如何使用
**Gradio** 是一个开源 Python 库,用于快速创建和部署机器学习模型的用户界面。它支持多种输入输出形式,如文本、图像、音频等,无需复杂 Web 开发知识即可实现模型的直观展示和交互。Gradio 特点包括简单易用、实时更新、多样的输入输出形式以及轻松部署。通过几个简单的步骤,即可创建和分享功能强大的机器学习应用。
798 0
|
达摩院 安全 调度
网络流问题--交通调度【数学规划的应用(含代码)】阿里达摩院MindOpt
本文探讨了如何利用数学规划工具MindOpt解决交通调度问题。交通调度涉及网络流分析,考虑道路容量、车辆限制、路径选择等因素,以实现高效运行。通过建立数学模型,利用MindOpt云平台和建模语言MAPL,设定流量最大化目标并确保流量守恒,解决实际的调度问题。案例展示了如何分配车辆从起点到终点,同时满足道路容量约束。MindOpt Studio提供在线开发环境,支持模型构建和求解,帮助优化大规模交通调度。
|
人工智能 测试技术 API
【AIGC】LangChain Agent(代理)技术分析与实践
【5月更文挑战第12天】 LangChain代理是利用大语言模型和推理引擎执行一系列操作以完成任务的工具,适用于从简单响应到复杂交互的各种场景。它能整合多种服务,如Google搜索、Wikipedia和LLM。代理通过选择合适的工具按顺序执行任务,不同于链的固定路径。代理的优势在于可以根据上下文动态选择工具和执行策略。适用场景包括网络搜索、嵌入式搜索和API集成。代理由工具组成,每个工具负责单一任务,如Web搜索或数据库查询。工具包则包含预定义的工具集合。创建代理需要定义工具、初始化执行器和设置提示词。LangChain提供了一个从简单到复杂的AI解决方案框架。
1531 3
|
机器学习/深度学习 TensorFlow 算法框架/工具
|
数据挖掘 Java Linux
【毕业设计之python系列】基于Python+GUI的在线音乐播放器的设计与实现
【毕业设计之python系列】基于Python+GUI的在线音乐播放器的设计与实现
1175 0
|
SQL 关系型数据库 MySQL
MySQL分页查询详解:优化大数据集的LIMIT和OFFSET
MySQL的分页查询是处理大量数据集的常见需求,了解`LIMIT`和`OFFSET`关键字的用法可以帮助您有效地实现分页功能。同时,性能优化也是确保查询高效执行的关键。通过合理配置和结合其他优化策略,您可以轻松应对分页查询的挑战,提供更好的用户体验。
1761 0
MySQL分页查询详解:优化大数据集的LIMIT和OFFSET
|
小程序 前端开发 JavaScript
【uniapp小程序】配置tabbar底部导航栏
【uniapp小程序】配置tabbar底部导航栏
884 0
【uniapp小程序】配置tabbar底部导航栏
|
JavaScript 前端开发 API
swiper 使用(轮播图) |学习笔记
快速学习 swiper 使用(轮播图)
1017 0
swiper 使用(轮播图) |学习笔记
|
缓存 前端开发 NoSQL
基于springboot实现快递代取管理系统
本项目基于springboot框架开发而成,前端采用bootstrap和layer框架开发,系统功能完整,界面简洁大方,比较适合做毕业设计使用。 本项目主要实现了代取快递的信息管理功能,使用角色有三类:一是客户可以直接访问系统下单,输入代取快递的相关信息,并可以在系统中查询订单的完成进度,也可以对系统进行相应的反馈并查询反馈的回复情况。也可以直接在线支付代取费用。二是接单员,可以登陆系统进行接单,并根据自己的订单完成情况修改订单状态,查询自己的订单等。三是系统管理员,可以实现对人员和订单信息的管理,对反馈信息的回复等操作。
544 1
基于springboot实现快递代取管理系统