CN112199682B - 一种基于可信计算的白名单库文件保护方法 - Google Patents

一种基于可信计算的白名单库文件保护方法 Download PDF

Info

Publication number
CN112199682B
CN112199682B CN202011208406.0A CN202011208406A CN112199682B CN 112199682 B CN112199682 B CN 112199682B CN 202011208406 A CN202011208406 A CN 202011208406A CN 112199682 B CN112199682 B CN 112199682B
Authority
CN
China
Prior art keywords
trusted
service agent
white list
library file
list library
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202011208406.0A
Other languages
English (en)
Other versions
CN112199682A (zh
Inventor
周强
孙群
李珏莹
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shanghai Szambo Micro Information Technology Co ltd
Original Assignee
Shanghai Szambo Micro Information Technology Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Shanghai Szambo Micro Information Technology Co ltd filed Critical Shanghai Szambo Micro Information Technology Co ltd
Priority to CN202011208406.0A priority Critical patent/CN112199682B/zh
Publication of CN112199682A publication Critical patent/CN112199682A/zh
Application granted granted Critical
Publication of CN112199682B publication Critical patent/CN112199682B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/562Static detection
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/602Providing cryptographic facilities or services
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/64Protecting data integrity, e.g. using checksums, certificates or signatures

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • General Health & Medical Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Bioethics (AREA)
  • Virology (AREA)
  • Storage Device Security (AREA)

Abstract

本发明公开了一种基于可信计算的白名单库文件保护方法,首先将可信服务代理自身度量值扩展到指定的平台配置寄存器中,然后在接收到封装请求后,对白名单库文件进行度量,计算文件哈希值,并将度量的哈希值和指定的平台配置寄存器进行数据封装,接着在接收到验证请求后,对白名单库文件重新进行度量,同时解封封装的数据,最后对比两者哈希值,以判断库文件是否被修改。本方法可实现高安全的白名单库文件防护,封装的数据是由可信服务代理自身状态和白名单库文件度量值与可信密码芯片一起生成,可信服务代理、白名单库文件、可信芯片中任何一项被篡改都能被及时发现,保护了白名单库文件的真实有效。

Description

一种基于可信计算的白名单库文件保护方法
技术领域
本发明涉及可信计算安全技术领域,具体为一种基于可信计算的白名单库文件保护方法。
背景技术
白名单为一种安全技术手段已在很多安全应用中使用,如防火墙、邮件系统、授权访问系统等。白名单机制是将“好的”、“允许的”程序信息或数据信息加入白名单列表,存储在白名单库中,安全应用在接收到程序或数据请求时通过比对白名单列表来判断这一程序或数据是否时“好的”、“被允许的”,对于不在白名单列表或与列表中信息不符的,将通过相应的安全策略进行处理。
白名单库文件是白名单安全机制的基础之一,一旦库文件被篡改,而没有被发现,那么安全应用就失去了与白名单列表比对的意义,无法正常行使安全功能。大多是安全应用都会对白名单库文件做一定程度的防护,但基于软件的防护方法始终无法妥善解决秘密被非法获取的问题,从而遗留下安全隐患。
针对白名单库文件的保护问题,本发明提出一种一种基于可信计算的白名单库文件保护方法,可信计算是由可信计算组织(TCG )发起并提出可信计算的体系结构和技术路线,形成一系列的技术标准。可信计算技术由可信密码芯片作为可信根,通过可信链方式将信任扩展至整个平台。可信密码芯片主要由CPU,密码引擎,平台配置寄存器(PCR),非易失存储器等部件组成。
平台配置寄存器(PCR)是用来记录系统运行状态的寄存器,这些PCR 不能被直接写入,只能扩展,扩展PCR也是使用现有的PCR值与新度量的值生成新的PCR值,可表示为PCR[n] =Hash ( PCR[n] ||新度量值 ), 因为PCR是扩展的,即使恶意软件能够扩展PCR,其影响的也只会是该PCR携带无效的度量值。
数据封装(Seal):是将秘密数据与特定的平台状态(PCR值)及可信密码芯片绑定在一起,可信密码芯片利用内部加密密钥对封装的秘密数据和PCR值进行加密生成封装数据。当用户需要获取被封装的数据时要对数据解封(UnSeal),可信密码芯片利用内部解密密钥对数据进行解密,然后判断可信绑定的PCR值是否与封装数据中的PCR值一致,如果一致,用户就能够获取被封装的数据,否则的话,可信密码芯片拒绝输出被封装的秘密数据。
可信计算技术体系有底层专有硬件芯片的支持,对秘密的保护强度较高,同时可信计算技术有完善得理论技术支撑,并得到众多使用者的支持,因此使用可信计算技术可以在保障保证高安全性得同时也比较方便部署和实施。
基于此,本发明设计了一种基于可信计算的白名单库文件保护方法。
发明内容
本发明的目的在于提供一种基于可信计算的白名单库文件保护方法,以解决为了保障对白名单库文件度量的真实性、有效性,和度量结果不可篡改性,使用数据封装,绑定硬件可信芯片,保护度量验证程序,授权访问等技术方法,将与白名单库文件库度量、验证、授权访问等可信功能整合在一起,形成独立的可信服务代理程序,对白名单库文件进行保护。
为实现上述目的,本发明提供如下技术方案:一种基于可信计算的白名单库文件保护方法,包括如下步骤:
第一步:可信服务代理(A)加入启动可信链中,在系统启动时将可信服务代理(A)的度量值扩展到平台配置寄存器(PCR)中;
第二步:安全应用在每次与可信服务代理(A)通讯前先发送自检命令给可信服务代理(A),可信服务代理(A)计算自身哈希值,并与PCR(15)进行对比,Hash(0∥Hash(A)),只有结果相同时才能继续执行后续命令;
第三步:安全应用在初始化时先提请可信服务代理(A)自检,自检无误后向可信服务代理(A)提交封装请求,提交白名单库文件文件(A)及用户授权信息(Auth),可信服务代理(A)计算白名单库文件文件(F)的哈希值V=Hash(F),发送封装命令到可信芯片,可信芯片验证授权信息无误后对数据进行封装,返回封装数据M;表示为M=Seal(V,Auth,PCR(15)),安全应用存储封装数据M;
第四步:安全应用在需要验证白名单库文件(F)时先提请可信服务代理(A)自检,自检无误后向可信服务代理(A)提交解封请求,提交封装数据M与授权信息(Auth),可信服务代理(A)对白名单库文件(F)重新度量,计算白名单库文件的哈希值V’=Hash(F),同时发送解封命令到可信芯片,可信芯片验证授权信息无误后对数据进行解封,解封数据后返回解封数据V,V=Unseal(M,Auth,PCR(15)),可信服务代理对比V和V’,结果相同则返回验证通过,否则返回验证错误;
第五步:安全应用在更新修改白名单库文件(F)后需重新向可信服务代理(A)提交封装请求,可信服务代理(A)重新计算白名单库文件(F)的哈希值V=Hash(F),发送封装命令到可信芯片,可信芯片验证授权信息无误后对数据进行封装,返回封装数据M,安全应用更新封装数据M。
作为本发明的进一步方案,第一步中的可信服务代理(A)的度量值扩展到平台配置寄存器(PCR)中,以防止可信服务代理程序自身被非法篡改。
作为本发明的进一步方案,第一步中在可信计算标准中PCR0~15是静态PCR,只能在重启时被重置,其中PCR0~7被定义为BIOS、MBR等使用,可信服务代理(A)的度量值可以扩展到PCR8~15中。
本方法与其他白名单库文件保护方法相比,其优点在于运用可信计算原理,对白名单库文件进行保护,使用可信密码芯片对进行数据装加密,使得非法攻击伪造的白名单库文件无法通过可信校验,安全防护强度高。同时部署较简单,安全应用不用关心底层可信计算技术原理,通过简单的接口调用,即可实现高安全的白名单库文件防护。封装的数据是由可信服务代理自身状态和白名单库文件度量值与可信密码芯片一起生成,可信服务代理、白名单库文件、可信芯片中任何一项被篡改都能被及时发现,保护了白名单库文件的真实有效。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明一种基于可信计算的白名单库文件保护方法的可信服务代理封装原理示意图;
图2为本发明一种基于可信计算的白名单库文件保护方法的可信服务代理解封原理示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
请参阅图1-2,本发明提供一种技术方案:一种基于可信计算的白名单库文件保护方法,包括如下步骤:
第一步:可信服务代理(A)加入启动可信链中,在系统启动时将可信服务代理(A)的度量值扩展到平台配置寄存器(PCR)中;
第二步:安全应用在每次与可信服务代理(A)通讯前先发送自检命令给可信服务代理(A),可信服务代理(A)计算自身哈希值,并与PCR(15)进行对比,Hash(0∥Hash(A)),只有结果相同时才能继续执行后续命令;
第三步:安全应用在初始化时先提请可信服务代理(A)自检,自检无误后向可信服务代理(A)提交封装请求,提交白名单库文件文件(A)及用户授权信息(Auth),可信服务代理(A)计算白名单库文件文件(F)的哈希值V=Hash(F),发送封装命令到可信芯片,可信芯片验证授权信息无误后对数据进行封装,返回封装数据M;表示为M=Seal(V,Auth,PCR(15)),安全应用存储封装数据M;
第四步:安全应用在需要验证白名单库文件(F)时先提请可信服务代理(A)自检,自检无误后向可信服务代理(A)提交解封请求,提交封装数据M与授权信息(Auth),可信服务代理(A)对白名单库文件(F)重新度量,计算白名单库文件的哈希值V’=Hash(F),同时发送解封命令到可信芯片,可信芯片验证授权信息无误后对数据进行解封,解封数据后返回解封数据V,V=Unseal(M,Auth,PCR(15)),可信服务代理对比V和V’,结果相同则返回验证通过,否则返回验证错误;
第五步:安全应用在更新修改白名单库文件(F)后需重新向可信服务代理(A)提交封装请求,可信服务代理(A)重新计算白名单库文件(F)的哈希值V=Hash(F),发送封装命令到可信芯片,可信芯片验证授权信息无误后对数据进行封装,返回封装数据M,安全应用更新封装数据M。
具体的,第一步中的可信服务代理(A)的度量值扩展到平台配置寄存器(PCR)中,以防止可信服务代理程序自身被非法篡改。
具体的,第一步中在可信计算标准中PCR0~15是静态PCR,只能在重启时被重置,其中PCR0~7被定义为BIOS、MBR等使用,可信服务代理(A)的度量值可以扩展到PCR8~15中,为了避免和LINUX、IMA,WINDOWS、BITLOCKER等冲突,建议使用PCR11~15,本实施例选择将可信服务代理度量值扩展到PCR15,表示为PCR(15) := Hash(PCR(15) + Hash(A))。
本方法与其他白名单库文件保护方法相比,其优点在于运用可信计算原理,对白名单库文件进行保护,使用可信密码芯片对进行数据装加密,使得非法攻击伪造的白名单库文件无法通过可信校验,安全防护强度高。同时部署较简单,安全应用不用关心底层可信计算技术原理,通过简单的接口调用,即可实现高安全的白名单库文件防护。封装的数据是由可信服务代理自身状态和白名单库文件度量值与可信密码芯片一起生成,可信服务代理、白名单库文件、可信芯片中任何一项被篡改都能被及时发现,保护了白名单库文件的真实有效。
在本说明书的描述中,参考术语“一个实施例”、“示例”、“具体示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
以上公开的本发明优选实施例只是用于帮助阐述本发明。优选实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施方式。显然,根据本说明书的内容,可作很多的修改和变化。本说明书选取并具体描述这些实施例,是为了更好地解释本发明的原理和实际应用,从而使所属技术领域技术人员能很好地理解和利用本发明。本发明仅受权利要求书及其全部范围和等效物的限制。

Claims (3)

1.一种基于可信计算的白名单库文件保护方法,其特征在于,包括如下步骤:
第一步:可信服务代理A加入启动可信链中,在系统启动时将可信服务代理A的度量值扩展到平台配置寄存器PCR中;
第二步:安全应用在每次与可信服务代理A通讯前先发送自检命令给可信服务代理A,可信服务代理A计算自身哈希值,并与PCR15进行对比,Hash(0||Hash(A)),只有结果相同时才能继续执行后续命令;
第三步:安全应用在初始化时先提请可信服务代理A自检,自检无误后向可信服务代理A提交封装请求,提交白名单库文件文件F及用户授权信息Auth,可信服务代理A计算白名单库文件文件F的哈希值V=Hash(F),发送封装命令到可信芯片,可信芯片验证授权信息无误后对数据进行封装,返回封装数据M;表示为M=Seal(V,Auth,PCR15),安全应用存储封装数据M;
第四步:安全应用在需要验证白名单库文件F时先提请可信服务代理A自检,自检无误后向可信服务代理A提交解封请求,提交封装数据M与授权信息Auth,可信服务代理A对白名单库文件F重新度量,计算白名单库文件的哈希值V’=Hash(F),同时发送解封命令到可信芯片,可信芯片验证授权信息无误后对数据进行解封,解封数据后返回解封数据V,V=Unseal(M,Auth,PCR15),可信服务代理对比V和V’,结果相同则返回验证通过,否则返回验证错误;
第五步:安全应用在更新修改白名单库文件F后需重新向可信服务代理A提交封装请求,可信服务代理A重新计算白名单库文件F的哈希值V=Hash(F),发送封装命令到可信芯片,可信芯片验证授权信息无误后对数据进行封装,返回封装数据M,安全应用更新封装数据M。
2.根据权利要求1所述的一种基于可信计算的白名单库文件保护方法,其特征在于:第一步中的可信服务代理A的度量值扩展到平台配置寄存器PCR中,以防止可信服务代理程序自身被非法篡改。
3.根据权利要求1所述的一种基于可信计算的白名单库文件保护方法,其特征在于:第一步中在可信计算标准中PCR0~15是静态PCR,只能在重启时被重置,其中PCR0~7被定义为BIOS、MBR等使用,可信服务代理A的度量值可以扩展到PCR8~15中。
CN202011208406.0A 2020-11-03 2020-11-03 一种基于可信计算的白名单库文件保护方法 Active CN112199682B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011208406.0A CN112199682B (zh) 2020-11-03 2020-11-03 一种基于可信计算的白名单库文件保护方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011208406.0A CN112199682B (zh) 2020-11-03 2020-11-03 一种基于可信计算的白名单库文件保护方法

Publications (2)

Publication Number Publication Date
CN112199682A CN112199682A (zh) 2021-01-08
CN112199682B true CN112199682B (zh) 2022-08-02

Family

ID=74034229

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011208406.0A Active CN112199682B (zh) 2020-11-03 2020-11-03 一种基于可信计算的白名单库文件保护方法

Country Status (1)

Country Link
CN (1) CN112199682B (zh)

Citations (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103093150A (zh) * 2013-02-18 2013-05-08 中国科学院软件研究所 一种基于可信芯片的动态完整性保护方法
US8950007B1 (en) * 2008-04-07 2015-02-03 Lumension Security, Inc. Policy-based whitelisting with system change management based on trust framework
CN104933354A (zh) * 2014-12-30 2015-09-23 国家电网公司 一种基于可信计算的白名单静态度量方法
CN104991526A (zh) * 2015-05-04 2015-10-21 中国科学院软件研究所 工业控制系统安全支撑框架及其数据安全传输和存储方法
CN105468978A (zh) * 2015-11-16 2016-04-06 国网智能电网研究院 一种适用于电力系统通用计算平台的可信计算密码平台
CN105721500A (zh) * 2016-04-10 2016-06-29 北京工业大学 一种基于TPM的Modbus/TCP协议的安全增强方法
CN106169054A (zh) * 2016-07-13 2016-11-30 浪潮电子信息产业股份有限公司 一种基于可信状态的访问控制方法
CN106529282A (zh) * 2016-11-10 2017-03-22 广东电网有限责任公司电力科学研究院 一种基于信任链的白名单执行系统及执行方法
CN106709375A (zh) * 2016-11-11 2017-05-24 大唐高鸿信安(浙江)信息科技有限公司 基于可信芯片的文件保护方法
CN107015982A (zh) * 2016-01-27 2017-08-04 阿里巴巴集团控股有限公司 一种监控系统文件完整性的方法、装置和设备
CN108270574A (zh) * 2018-02-11 2018-07-10 浙江中控技术股份有限公司 一种白名单库文件的安全加载方法及装置
CN111651769A (zh) * 2019-03-04 2020-09-11 阿里巴巴集团控股有限公司 获取安全启动的度量方法和装置

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7716494B2 (en) * 2004-07-15 2010-05-11 Sony Corporation Establishing a trusted platform in a digital processing system
US10528740B2 (en) * 2017-06-15 2020-01-07 International Business Machines Corporation Securely booting a service processor and monitoring service processor integrity

Patent Citations (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8950007B1 (en) * 2008-04-07 2015-02-03 Lumension Security, Inc. Policy-based whitelisting with system change management based on trust framework
CN103093150A (zh) * 2013-02-18 2013-05-08 中国科学院软件研究所 一种基于可信芯片的动态完整性保护方法
CN104933354A (zh) * 2014-12-30 2015-09-23 国家电网公司 一种基于可信计算的白名单静态度量方法
CN104991526A (zh) * 2015-05-04 2015-10-21 中国科学院软件研究所 工业控制系统安全支撑框架及其数据安全传输和存储方法
CN105468978A (zh) * 2015-11-16 2016-04-06 国网智能电网研究院 一种适用于电力系统通用计算平台的可信计算密码平台
CN107015982A (zh) * 2016-01-27 2017-08-04 阿里巴巴集团控股有限公司 一种监控系统文件完整性的方法、装置和设备
CN105721500A (zh) * 2016-04-10 2016-06-29 北京工业大学 一种基于TPM的Modbus/TCP协议的安全增强方法
CN106169054A (zh) * 2016-07-13 2016-11-30 浪潮电子信息产业股份有限公司 一种基于可信状态的访问控制方法
CN106529282A (zh) * 2016-11-10 2017-03-22 广东电网有限责任公司电力科学研究院 一种基于信任链的白名单执行系统及执行方法
CN106709375A (zh) * 2016-11-11 2017-05-24 大唐高鸿信安(浙江)信息科技有限公司 基于可信芯片的文件保护方法
CN108270574A (zh) * 2018-02-11 2018-07-10 浙江中控技术股份有限公司 一种白名单库文件的安全加载方法及装置
CN111651769A (zh) * 2019-03-04 2020-09-11 阿里巴巴集团控股有限公司 获取安全启动的度量方法和装置

Also Published As

Publication number Publication date
CN112199682A (zh) 2021-01-08

Similar Documents

Publication Publication Date Title
US8127146B2 (en) Transparent trust validation of an unknown platform
US9361462B2 (en) Associating a signing key with a software component of a computing platform
US8670568B2 (en) Methods and systems for utilizing cryptographic functions of a cryptographic co-processor
KR101067399B1 (ko) 대칭 키 암호화에 기초한 데이터의 저장 및 검색을 위한, 컴퓨팅 장치에서 구현되는 방법, 시스템 및 복수의 명령어를 저장하는 하나 이상의 컴퓨터 판독가능 매체
KR100996784B1 (ko) 공개 키 암호화에 기초한 데이터의 저장 및 검색을 위한, 컴퓨팅 장치에서 구현되는 방법, 시스템 및 복수의 명령어를 저장하는 하나 이상의 컴퓨터 판독가능 매체
EP2207121B1 (en) Protecting content on virtualized client platforms
US8832457B2 (en) Methods and apparatus for authenticating components of processing systems
CN107851160B (zh) 用于在isa控制下进行多个共存可信执行环境的可信i/o的技术
US8364975B2 (en) Methods and apparatus for protecting data
US7380136B2 (en) Methods and apparatus for secure collection and display of user interface information in a pre-boot environment
KR101402509B1 (ko) 사용자 인증에 기초하여 무결성을 수정하는 방법 및 컴퓨터시스템
US9563774B1 (en) Apparatus and method for securely logging boot-tampering actions
US20040093505A1 (en) Open generic tamper resistant CPU and application system thereof
US20110191574A1 (en) Method and apparatus for binding tpm keys to execution entities
US20090019285A1 (en) Establishing a Trust Relationship Between Computing Entities
EP2759955A1 (en) Secure backup and restore of protected storage
CN108399329A (zh) 一种提高可信应用程序安全的方法
TW201500960A (zh) 在配有適用統一可延伸韌體介面(uefi)之韌體之計算裝置中的安全性變數變化檢測技術
Buskey et al. Protected jtag
CN116566613A (zh) 使用平台密钥保护与安全处理器的通信
Dave et al. Care: Lightweight attack resilient secure boot architecture with onboard recovery for risc-v based soc
CN112199682B (zh) 一种基于可信计算的白名单库文件保护方法
Dave et al. Care: Lightweight attack resilient secure boot architecturewith onboard recovery for risc-v based soc
TWI841919B (zh) 在一開蓋竄改事件中使一安全啟動失敗的電腦系統
CN116089967B (zh) 数据防回滚方法和电子设备

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant