应用编程接口(API)密钥是应用编程接口用来识别调用应用程序或用户的唯一代码。API密钥用于追踪和控制API的使用者及其使用方式,并验证和授权应用程序,其运作原理与用户名和密码相似。
API密钥以单一密钥或一组多个密钥的形式出现。用户应该遵循最佳实践,改善整体安全性,以防止API密钥被盗并避免API密钥泄露的相关后果。
API与API密钥
要了解什么是API密钥,必须先知道什么是API。应用编程接口或API是允许两个或多个应用程序共享信息的软件中介。例如,CoinMarketCap的API允许其他应用程序检索和使用价格、交易量和市值等加密货币数据。
API密钥形式多样,可以是单一密钥或一组多个密钥。不同的系统使用这些密钥来验证和授权应用程序,类似于用户名和密码的使用原理。API客户端使用API密钥来验证调用API的应用程序。
例如,假设币安学院要使用CoinMarketCap API,CoinMarketCap生成一个API密钥,在币安学院(API客户端)请求API访问权限时用于验证其身份。币安学院访问CoinMarketCap的API时,应将此API密钥连同请求一起发送给CoinMarketCap。
此API密钥仅限币安学院使用,不得与他人共享或发送给他人。共享此API密钥,即为允许第三方以币安学院的身份访问CoinMarketCap,并且第三方的任何操作都将显示为来自币安学院。
CoinMarketCap API还能借助API密钥来确认应用程序是否有权访问所请求的资源。此外,API所有者用API密钥能监控API活动,例如请求的类型、流量和数量。
什么是API密钥?
API密钥用于控制和追踪API的使用者及其使用方法。"API密钥"一词对不同的系统而言含义有所不同。有些系统只有单一代码,其他系统则有多个针对单一"API密钥"的代码。
因此,"API密钥"是API用于验证和授权调用用户或应用程序的唯一代码或一组唯一代码。有些代码用于验证,有些则用于创建加密签名以证明请求的合法性。
验证代码通常统称为"API密钥",用于加密签名的代码则名称各异,例如"加密密钥"、"公钥"或"私钥"。验证需要识别所涉及的实体,并确认其身份是否与所声称的一致。
另一方面,授权指定允许访问的API服务。API密钥的作用类似于账户的用户名和密码,可以连接到其他安全功能,以提高整体安全性。
每个API密钥通常由API所有者作为特定实体生成(详情见下方),每次调用API端点时需要用户验证或授权(或二者并用),并且都会用到相关密钥。
加密签名
有些API密钥将加密签名用作附加验证层。用户要向API发送某些数据时,可将另一个密钥生成的数字签名添加到请求中。API所有者使用密码学,即可验证此数字签名是否与发送的数据匹配。
对称签名与非对称签名
通过API共享的数据可通过加密密钥进行签名。以下为密钥的类别:
对称密钥
此类密钥涉及用一个加密密钥同时执行数据签名和签名验证。在对称密钥类别中,API密钥和加密密钥通常由API所有者生成,API服务必须用相同的加密密钥验证签名。使用单一密钥的主要优势在于,生成和验证签名的速度更快,所需算力更少。散列消息认证码(HMAC)就是对称密钥的典型代表。
非对称密钥
此类密钥涉及到私钥与公钥两种密钥的使用。二者之间存在区别,但通过密码学相关联。私钥用于生成签名,而公钥用于验证签名。API密钥由API所有者生成,私钥和公钥对则由用户生成。API所有者只需使用公钥进行签名验证,私钥即可保持本地加密。
使用非对称密钥的主要优势在于,签名生成与验证密钥独立开来,安全性更高。这样一来,外部系统可在无法生成签名的情况下验证签名。另一个优势则是,有些非对称加密系统支持私钥添加密码。RSA密钥对便是其中的典型代表。
API密钥是否安全?
API密钥的职能取决于用户。API密钥类似于密码,同样需要谨慎对待。共享API密钥与共享密码差不多。这样做用户的账户会面临风险,因此不应该共享。
API密钥能在系统中执行强大的操作,常常会成为网络攻击目标。各种操作包括请求个人信息或执行金融交易等。事实上,已经发生过网络爬虫攻击在线代码数据库,窃取API密钥得手的案例。
API密钥遭窃的后果很严重,可能会导致重大经济损失。此外,有些API密钥不会过期。一旦被盗,只要密钥本身未作废,攻击者就能无度使用。
使用API密钥的最佳实践
API密钥能访问敏感数据并普遍存在漏洞,因此使用安全至关重要。使用API密钥提高整体安全性时,敬请遵循以下最佳实践指南:
-
尽量频繁变更API密钥。这意味着应删除当前的API密钥并创建新密钥。对于多个系统,生成和删除API密钥很容易。某些系统要求用户每30天至90天更改密码。与之相似,尽量按此频率更换API密钥。
-
使用IP白名单:创建API密钥时,制定一份授权使用该密钥的IP列表(即IP白名单),或者详列IP屏蔽清单(即IP黑名单)。这样即使API密钥被盗,无法识别的IP则不得访问。
-
使用多个API密钥:拥有多个密钥并划分各个密钥的职能将能降低安全风险,原因在于安全性不由具有广泛权限的单一密钥决定。您可以为每个密钥设置不同的IP白名单,进一步降低安全风险。
-
安全存储API密钥:不要将密钥存储在公共场所或公共计算机上;不要以原始纯文本格式存储。相反,为了提高安全性,请加密或使用加密管理器单独存储各个密钥,不要无意暴露。
-
请勿透露个人的API密钥。共享API密钥与共享密码大同小异。共享即表示向另一方授予本人的验证和授权权限。API密钥泄露后,将会遭到窃取并用于侵入个人账户。API密钥仅限本人与生成该密钥的系统使用。
API密钥泄露后,请先禁用以防造成更大的损失。如造成经济损失,请将事件相关的关键信息截图,联系相关单位,并向警方报案。这是增加追回损失资金几率的最佳做法。
结语
API密钥提供核心的验证和授权功能,用户必须谨慎管理和保护自己的密钥。保障API密钥的安全使用应该考虑多层次、多方面的因素。总而言之,API密钥应视作个人账户密码。