CN103957106A - 自定义双向动态安全认证*** - Google Patents
自定义双向动态安全认证*** Download PDFInfo
- Publication number
- CN103957106A CN103957106A CN201410195687.9A CN201410195687A CN103957106A CN 103957106 A CN103957106 A CN 103957106A CN 201410195687 A CN201410195687 A CN 201410195687A CN 103957106 A CN103957106 A CN 103957106A
- Authority
- CN
- China
- Prior art keywords
- user
- initial code
- value
- code
- rule
- 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.)
- Granted
Links
Landscapes
- Financial Or Insurance-Related Operations Such As Payment And Settlement (AREA)
Abstract
自定义双向动态安全认证***,主要是通过用户自定义规则来生成动态密码以达到保护密码的目的。它不但可以用来单向认证也能做到双向认证。主要特征有:1.表达式支持丰富的运算符和函数,层层嵌套,同时参与运算的初始码元素项的位置具有动态变址功能,这些动态变换极大地增强了安全性。2.初始码元素值默认随机生成,用户也可以按个人意愿干预生成。3.兼容传统的固定密码方式,用户拥有自主决定其帐号安全性高低的权力。4.初始码通过矩阵(如九宫格)模式,借助图形方式,可以轻松设定、记忆和计算高安全性规则。该***应用范围很广,可以在银行柜台、ATM机、手持刷卡设备上使用,更适合于通过电脑和手机进行的帐号操作。
Description
技术领域
本技术主要是利用动态密码技术来大大提高用户账户的安全性,广泛适用于互联网帐号认证、银行ATM机、***、手机支付等需要帐号认证的场合,同时它完全兼容传统的固定密码方式。
背景技术
当今电子支付和取现越来越方便,但随之而来的安全问题也越来越突出了。主要是原因是脆弱的密码认证体系,虽然在网银里也有证书加动态码等校验方式,但这需要额外的设备,携带不方便,而且与移动支付的快捷方式也相悖。在传统银行卡领域,也是采用***加密码方式,脆弱性自然不言而喻,密码和***被偷窥,可能就会导致用户的利益受损,智能手机的普及提高了用户使用体验的同时,也变得跟电脑一样为各种后门和木马提供了可乘之机。主要原因是用户太依赖于外部设备了,人的大脑实现的仅仅是存储器的功能,没有起到一点的CPU功能,所以信息极为容易被复制盗取。因此让大脑不但有存储功能而且还要具有CPU的功能,只有这样才能大大加强用户对帐号安全的控制能力,用户可以根据其帐号的重要性来自主选择其帐号的安全性高低等级。
发明内容
双向动态安全认证***,其基本思想就是让用户的大脑也具备CPU运算功能,来达到双向安全检验。通过每次输入不同的密码,来大大降低密码被偷窥、手机被盗等而带来的账户损失的风险等。
设计目标:
1.努力使编写用于破解分析的程序难度远超以前传统的固定密码模式。
2.在合适的规则下,努力达到即使在输入密码时所有通讯信息被恶意完整地截获很多次,并且使用编写的攻击程序进行机器破解的情况下,也极难破解出规则。
3.努力达到能够在初始码矩阵尺寸不大的情况下(如3X3,尺寸越大,包含的干扰信息也更多,抗攻击能力自然也越强,但相对地也增加了用户记忆的复杂度),也能轻松达到很高的加密强度。
4.努力做到用户的学习成本、记忆成本、运算成本都较低,和传统的固定密码方式具有相当的代价,甚至可能更低。学习成本指的是掌握这个规则所花费的时间, 记忆成本指的是记住密码和规则的耗时,运算成本指的是算出密码的难易程度,这个也是最重要的,解密时如需要很多时间和脑力,这是很多用户都无法容忍和接受的。
同时它也完全兼容传统的固定密码方式,也就是用户同样可以用它来设定传统的所有密码都是固定值的固定密码,这适用于安全要求不高的帐号。它也可以按照用户自己的意愿,设定部分或者全部位置上的值是动态的。一般来说,在密码串中其中有2~4个是动态计算出来,其它部分可以设定为固定方式,是比较兼顾记忆和安全的一种方式。
这种安全认证体系的核心是:基于随机数矩阵,允许用户利用各种运算符号和函数来自定义各自独特的算法规则,以达到每次输入密码都不相同。通过灵活多变的表达式来实现线性和非线性变换,从而阻止密码被破解,如果在ATM机上使用这个时,足够的安全强度下,完全不怕别人偷窥密码和盗走***。网银操作时,即使机器中了木马病毒或者在不安全的网络环境和设备下使用,也能保证相当程度的安全,同时可以通过自己给服务器设定的认证信息,来检验是否是真的运营商网站发过来的验证码,而不是钓鱼网站的诈骗。
这个具体认证一般流程类似如下:
1.用户根据用户名或者***登录***
2.服务器向用户发送类似随机的一组随机生成的数字矩阵(如3X3的九宫格,实际上不一定真的是随机,用户也可以干预设定)。(即初始码)
3.用户根据这个数字矩阵组合中隐藏的自定义规则信息来验证服务器的真实性(这个非必需,用户自己可选),以及根据自定义规则对数字输入相应的解码(可能还有和其它方式的验证结合一起使用)。(返回码)
4.服务器根据用户设定的规则,或者预先生成的返回码的单向特征码来检验是否是授权用户,认证过程完成。
本***应用场合:
电脑网银支付:用这个认证***可以作为传统意义上的验证码,或者融入到传统的密码中,即用户输入的密码有一部分是按规则来算的,另外一部分则是固定的,这部分可以为ASCII码,保存密码也可以采用hash等单向算法来提高安全性。可以加强安全,防止木马程序盗号,甚至可以省略手机验证码环节,这样就可以不必非手机不可了。
移动手机支付:由于移动支付快捷性,也带来更多的风险,因为不像电脑加手机模式,此时 只有一个验证通讯渠道了,手机上木马病毒更加容易拦截密码和屏蔽验证短信。使用动态密码,在不必携带额外设备的前提下,可以大大加强手机支付的安全性,也防止手机丢失、SIM卡复制、***别人挂失补办等带来的风险。
ATM取款:在ATM机操作时,经常担心有摄像头别人偷看等和读卡器在,导致卡的安全性大大降低。使用动态密码作为辅助验证或者主验证时,可以很大程度上打消别人偷盗的主意。
***:在手持***时,也容易担心别人偷记密码。为了快捷兼顾安全,这时可以设定一个简单的动态码,如本来的传统的六位固定密码里,把前1位是动态算出来的,后面5位则使用固定密码。刷卡时,由于读卡器的限制,不方便用多行方式展示时,则可以输出一行数字,如6X1,8X1等模式。
附图说明
图1是用户设定案例1规则的示意图。
图2是用户设定案例3规则的示意图。
图3是简单演示对齐原则中按位对齐方式的方式。
图4是某个规则的示意图。
图5是某个规则的示意图。
图6是初始码的一些展示方式,包括未添加和添加辅助标号和线条的一些例子。
术语解释:
初始码元素:表示***向用户发送的其中的某个初始数字,一般为默认的随机生成方式,初始码项必须为数字,每个初始码元素代表一个数字。是0,1,2。。。9.中的一个。多个初始码元素组成一起统称为初始码。
初始码:表示***向用户发送的初始数字组合,由多个初始码元素组成,值默认均为随机生成。组成方式可以用户自己定义,在手机、ATM机、电脑上一般为九宫格,手持刷卡设备限于屏幕尺寸一般可以为一行如8X1。每个初始码元素表达为$加位置号,位置号从1开始,如九宫格的下标就从1到9.分别记为$1,$2,$3..$9.下标是按照从先从左到右,再从上到下的原则编号。如$1,$2分别表示第一个(也就是$1表示第一个初始码元素),第二个位置上的数值,其中下标1,2等可以动态变化,此时表达方式为加括号来区别,如
$(1+2)其等价于$(3),即为第3个初始码元素。
$($(1))表示取第$(1)位置上的值,如$(1)上值为4,则等价于$(4)
返回码元素:由用户输入的返回***的一串密码中的某一个,一个返回码元素只能是一个字符。在电脑或者手机等移动设备时可以为A$CII码(包含数字、字母和符号),在手持刷卡设备时或者ATM机等时,则因为设备所限制一般均须为数字。返回码元素可以由一个或者多个初始码元素(甚至包括返回码元素)按照一定规则生成,也可以固定为某个值(此时返回码元素可以为数字、字母和符号,根据设备不同有所不同)。
返回码:返回码(也就是通常的密码)由多个返回码元素组成,就是用户根据初始码算出相应的值后,向***发送的结果组合。符号表示为R加位置号。R1表示第一个位置上的值,(也就是第一个返回码元素)。为简化设计,返回码下标不支持动态可变。如果用户设定的返回码为6位长度,则从左到右依次是R1R2R3R4R5R6.
R1 | R2 | R3 | R4 | R5 | R6 |
R1=$2 //表示第一个返回码元素等于第二个初始码元素。
说明,表达式后面的//表示后面的斜体是注释,不是表达式的一部分,不参与运算,以下都以这种方式表达。
R2=5 //表示返回码中的第二个元素为固定值“5”
R3=k //表示返回码中的第三个元素为固定值“k”适用于可以输入ASCII码的设备。如电脑网银,手机等。
下标:初始码或者返回码的位置号就是下标。只有初始码的下标可以是表达式组成。$1中的下标就是1,R3中的下标就是指3.较为深入的用法中,在赋值表达式里,等号右边的表达式下标还可以是动态的(也就是变址),动态时,需要用括号括起来,里面还可以是表达式或者函数,可以层层嵌套,当下标发生越界时,取与值最接近的有效下标值。
用户在进行认证操作时,***向用户发送类似随机的一组数字(初始码)和传统的密码框,这组数字可以组成3X3模式的九宫格或者4X4,5X5,6X1,6X2,10X1等(用户可以自己定义,一般九宫格就够了,如果随机码定义较大时,如10X1,8X8,每个初始码元素旁可以添加辅助下标号或者用户设定用于辅助记忆的特定字符,甚至自定义辅助线条及颜色等,一般这些辅助信息不能参与运算,仅仅起到提示和快速定位用,或者行首或者列首标位置号等辅助方式帮助快速定位,方便用户找位置),用户可以在九宫格上的数字设定特定的隐含规则来确定是否真的是运营商提供的(这个非必需的),以及根据他自己定义的规则返回相应的数字(即返回码),运营商根据用户设定的规则进行计算来检查是否是用户本人的过程,来达到双向检验的目的。
每个初始码元素采用编号方式,下标从1开始先行后列,从左到右,再从上到下递增。$1表示第一个位置上数字的值(即初始码元素),$2表示第二个数值,依次类推。如下
6X1模式
$1 | $2 | $3 | $4 | $5 | $6 |
6X2模式
$1 | $2 | $3 | $4 | $5 | $6 |
$7 | $8 | $9 | $10 | $11 | $12 |
3X3模式(即九宫格)
$1 | $2 | $3 |
$4 | $5 | $6 |
$7 | $8 | $9 |
以下例子将都九宫格为例子,因为九宫格的初始码只有9个初始码元素,组成3X3的矩阵方式。相对容易用辅助线和点来快速记忆,而要安全一些,则可以考虑4X4,甚至5X5等,使用图形方式比单纯记忆数字位置方式更加印象深刻和容易记忆。
用户设定的的规则是,***随机生成9个数字(初始码),默认其实就是执行了算法$x=rand()%10,其中下标用x来表示。用户也可以设定某个初始码元素生成数字的规则,随机方式生成数字只是***默认的选项,执行在所有规则之前,在需要设定对金融网站真伪双向认证时,或者允许用户并且用户也设定了大尺寸的矩阵时,用户可能需要在中间植入一些用于帮助定位的特别数字,就不会所有的数字多是随机数方式了,而是包含隐含规则,用户则根据其自己设定的规则简单运算后返回返回码(返回码元素个数用户可以自己设定,有些设备则固定为6个,如ATM机或者手持刷卡设备)。
以下先通过几个简单例子来对双向安全认证有一个初步的了解。为了便于表述,静态部分,也就是密码当中设置为固定值的暂时忽略。返回码也为3个。
案例1.某用户设定一个最简单的方案如下,***随机生成九个数字,用户返回3个数字,分别是$4,$9,$3对应的数字即可。
如***生成并返回到用户界面的矩阵数字为如下时
用户则输入返回码应该为315。
这个用户的规则可以表达为如下(用户可以根据自己个人喜好画个容易记忆的用于辅助记忆的图,如图1所示):
R1=$4
R2=$9
R3=$3
R1R2R3则组成315数值
同样如果***给出的九宫格初始码为如下时
则对应的返回码R1R2R3又应该为852,可以看到每次密码根据***生成的九宫格不同而不同。当然这个非常简单的,安全性也很差。只要被完全拦截几次,不用借助程序分析,人脑都能分析出来该规则。
案例2.稍微升级一下上述的认证方式,结果还是3位返回码。只是加入一点加法,他觉得还有三个数字对他来说比较特殊235,于是分别和这个三个位置上的数字相加。
则这个用户的规则可以表达为如下:
R1=$4+2
R2=$9+3
R3=$3+5
还是以第一个***生成的九宫格数字为例,这样这个新的返回码就是:
R1=3+2=5
R2=1+3=4
R3=5+5=10=0//注意有结果只有一位,按照对齐原则,返回个位上的0
可以看到R3结果有两位了,注意这里有个规则必须遵守,就是结果只取和其位置相匹配上的数值,其它忽略,如此时R3的取值就应该忽略十位上的1,只取个位值上的0,所以此时,R3应该是0.因此R1R2R3组成的结果是540了。
5 | 4 | 0 |
以上都是单个元素相加的情况,也可以支持多个元素合在一起相加。
如规则为
R1R2=$4$9+18 //注R1R2表示十位上是R1个位上的值为R2,并非R1XR2
R3=$3+5
则上述的结果就是
R1R2=31+18=49 //$4$9=31$4上的值为3,$9上的值为1
R3=5+5=0
4 | 9 | 0 |
结果是490,注意同样R1R2组成2位数后,如果发生溢出,则还是只去两位数。如结果是123,则取结果23,忽略百位数1.这一种的安全性比原来高了一点,但也称不上安全。
案例3.某用户这次加入了对***自身的认证,防止该网站是个钓鱼网站。因此,在生成的九宫格数字时,他不再全部按默认的随机数生成方式了,而是设定了$5的值必须为$1+$2,同样有进位也忽略十位数。
规则表达式可以表示为(助记规则,如图2所示):
$5=$1+$2
R1R2=$4$9+18
R3=$3+5
则如下所示是合法的,正是***所生成的
$5=$1+$2=8+6=14=4,取个位则为4,所以这个可以知道该初始码是按用户规则生成的,而非假的网站。
案例4.用户可以由多个数字生成一个,并且有乘法,如规则
R1=$4+$9
R2=$6X$7
R3=$3+5
则当***生成如下初始码数字时,
R1=$4+$9=3+1=4
R2=$6X$7=6X5=0 //根据对齐原则舍弃十位上的3
R3=$3+5=5+5=0
所以此时密码应该是400
案例5.用本***实现传统的固定密码设置:当有用户对于这个动态密码算法觉得无法习惯,或者记不住,本***也完全可以兼容传统密码,他照样可以用本***设定固定密码,此时***弹出的随机生成的数字均是无用的摆设而已。具体设置很简单,直接R1,R2..R6等设置成某个数值就可以了。如用户的密码是223344,则规则如下
R1=2
R2=2
R3=3
R4=3
R5=4
R6=4//也可以用后面提到的区间表示,一行就够了R1-6=223344
对于可以支持ASCII码的设备或者***,后面直接为ASCII码。
通过以上几个小案例,可以看出动态密码的初步使用方法,到目前为止用到的算法也仅仅是加法,乘法,参与的初始码元素位置也均为固定的,使用在手持刷卡设备或者ATM机上,安全性相对足够了,但在电脑和手机里,则还是显得有些脆弱,需要更高的安全还需要提供变址和函数的功能来实现高安全性和易用性。
具体的规则如下:
1.主要运算符方面支持:加(+)、差(~)、乘(*)、除(/)、取模(%)
注意差不是平常的减号,差运算的结果是非负数。而减运算则有负数的。
2.关系运算符:大于(>),小于(<),等于(==)
注意关系运算符主要是在条件函数(if)里使用.不等于,大于等于,小于等于也可以支持,只是用上述三个也能表达这些功能,此外也可以再视需求提供与(&&)或(||)非(!)等逻辑运算符。
3.支持的常用值函数有:值函数有返回值,内部的参数很多也可以是表达式组合,常用值函数有:最小值(min)、最大值(max)、最小值所在下标(posbymin)、最大值所在下标(posbymax)、最接近数(nearest)、最接近数所在下标(posbynearest)、查指定值所在下标(posby)、条件函数(if)、乘幂(power)、平方根(sqrt)、特定值个数统计函数(count)、行列转位置(rowcol)、下标高低偏移函数、行左右循环移动函数、列循环上下移动函数、取IP地址函数、日期相关函数等等.其中日期函数涉及的时区以该金融机构所在的时区为准,如在中国,则取小时函数时,返回当前北京时间的小时,不过从提高安全性方面来说,日期函数对于提升安全的很有限,一般可以忽略不必使用或者不提供,远没有其它函数那样极为有用。最小值函数、最大值函数、求接近数函数、查指定值所在下标、特定值个数统计函数等则支持不定个数参数,如min($1,$5,$7),表示取$1,$5,$7中值最小的一个为准。Min($5,$8)时,参数只有两个,返回$5和$8中值最小的一个值。值函数一般返回值为数字类型,如果运营商提供的话也可以有字符类型,此时需要考虑类型匹配检查。
4.还有初始函数:主要是针对有需要的用户对初始码进行一定的初始设定。如删除值(del)放置函数(placeone)。初始函数在所有其它表达式之前执行,但在随机数生成之后,这些函数没有返回值。没有返回值的函数单独一个规则,不能赋值(即不能在等号表达式里出现)。
5.***规则设定的执行顺序依次如下(其中前面3步是在传给用户初始码前就已经执行完成,第4步则在用户输入密码后返回到服务器校验这个阶段才执行):
5.1初始码的随机初始化(必须的步骤)
5.2初始函数执行(根据用户自己设计可选)
5.3初始码元素赋值表达式的执行(根据用户自己设计可选,这步不含任何返回码元素)
5.4返回码元素赋值表达式的执行(必须的步骤)
6.以上运算符、值函数、初始函数,运营商可以根据实际需求增删,一般来说,提供的功能越多,用户可选择余地也越大,抗攻击能力也越强。
主要规则说明:
1.表达式规则:赋值表达式模式可以分为“目标元素组=规则表达式”、“1个目标元素=1个固定值”、“返回码元素区间=多个固定值”、“集合操作”等模式。以下逐个说明。
A.)目标元素组=规则表达式:目标元素组可以是一位或者多位返回码元素组成(如R1,R3R1,R4R5R6等),也可以是***生成的初始码元素(如九宫格上的数字,如$1,$1$3等),但目标元素组不能为既有初始码元素又有返回码元素的两者混合模式(如R1$2是非法的),关于等号(=)右边的规则表达式是否允许出现返回码元素厂商可视实际情况决定,如允许有,则此时该等号左边必须不能有初始码元素。左边表达式不能多次出现某一个元素。如$1$2$1=123.是非法的,右边则可以多次出现。一个元素不能同时出现在等号的左右两边。
B.)1个目标元素=1个固定值:这种模式的特点是等号右边的长度必须为1.
C.)返回码元素区间=多个固定值:这个只是针对多个的固定值时,用来快速设定用的,特点是等号左边包含连接符(-)或者逗号(,)符号。连接符左右两边都为数字,表示区间,区间长度必须与右边长度保持一致,否则表达式无效。右边此时都视为固定值系列,不再是表达式。
用户设定的规则由多个表达式组成,也就是表达式组,组内的规则是:从等号右边
的表达式中的元素到等号左边元素的可以组成有向关系,各个有向关系之间组成有
向图,但不能循环,也就是只能组成有向无环图。如下列表达式组是合法的
$1=$2+2 //注意,这里是以组为单位
R1=$1+5
R2=$3+8
但下面这组就不合法了
$1=$2+2 //$1<-$2
$2=$1~2 //$2<-$1结合上面这个规则$1$2循环引用了
R1=$1+5
D.)集合操作:这个视情况可以决定是否提供,主要是允许某个返回码元素为多值中任意一个。如R1IN[2,5,7]表示R1可以为2,5,7中任意一个。集合操作相当于返回码元素也可以充当初始码元素的作用,并且该元素还是允许用户自己动态生成。如两个规则为R1IN[2,5,7];R2=R1X$5;若$5=3,则用户的R1R2=26;R1R2=55;R1R2=71都是合法的,也就是说即时在初始码表完全一致的情况下,返回码也可以做到不一样,相应地更提高了安全性。
2.对齐原则:这个是简单易懂但却非常重要的规则。当目标结果集是1位时,则只取个位,如得出结果是23,则只取3.目标是两位时,则忽略百位数及以上值,如123时,则为23。同样当初始码的下标用是动态时,也可能发生溢出情况,即位置号超过总长度或者小于最小值1时,超过总长时自动取最大值(在九宫格里,取最大值9)或者下标计算为0时,自动取下标最小值1,这样确保不会越界操作,下标动态化可以大大加强密码的安全性,但对于初用者来说也相对略有点难度。
如R1=5+8=3//规则示意如图3所示
R1R2=45+60=05
上面如果用户只想取十位上的数字,而忽略个位上的值,其实也很简单,结果再除以10就可以了。如R1=5X7/10=3
R1R2=10+20=30
R1R2=3~15=|3-15|=12
$($(1)+$(2))如果是九宫格且$(1)+$(2)=0时,则其实是$(1),由于九宫格位置最大值是9,
所以当$(1)+$(2)大于9时,还是取9,即$(9).当然运营商也可以对越界按取模来循环,
而不是取极值,但这样相对来说增加了用户的复杂度。
下面举一个动态下标的例子,用户想R1是从第一行中的某个位置取出。读取位置规则
是第4个位置上的值对3取模然后加1,即
R1=$($4%3+1)
当九宫格如下所示时
则$4=3
所以R1=$(3%3+1)=$1=8
也就是取第一个初始码元素。如果$4=2时,则R1=$(2%3+1)=$(3)=5了,可以看出
R1是根据$4的值来动态决定是从第一行上的哪个位置取值。
同样如果想动态取某一列上的数据,则略微复杂一些。如想根据$4来动态决定取中间列
上的值,可以表达为
R1=$(($4%3)X3+2)当初始码如上所示时,则R1=$(0X3+2)=$2=6
如果$4=1则R1=$(1X3+2)=$5=4
取模运算确保数据访问不会越界(这些操作其实也可以通过行列相关函数更加轻松地实
现,但本质上一样,具体省略)。
3.取整原则:除法结果为整数,不管能否整除,没有小数(包括在运算过程中的中间结果也全部是整数),也不四舍五入,仅仅是取整数部分,如(7除以2)7/2=3,6/2=3,9/4=2,15/4=3,11/3=3,在运算过程中,也是取整,如5/2X4=8而不是10。求平方根函数sqrt(27)=5等。
4.运算符优先级,同一优先级时,则先左后右运算。括号拥有最高优先级,其次乘、除、取模,最后为逗号,以下是一个具体的优先权规则定义实现
级别 | 运算符 | 说明 |
1 | () | 括号 |
2 | X/% | 乘,除,取模 |
3 | +~ | 加,差值 |
4 | ==<> | 关系运算符 |
5 | = | 赋值运算符 |
6 | ‖&&! | 逻辑运算符,内部也有优先 |
7 | , | 逗号 |
如(1+2)*3值为9,先执行1+2然后再乘3
1+2*3值为7,先执行2*3因为优先级较高,然后再执行十号。
5.取模操作是求余数操作,如8%3=2,余数为2.
8%4=0
5%3=2
25%4=1
6.差(~)运算,为两个数之差值,数学表达时即为两个数相减后再取绝对值,数学表达式即
为A~B=|A-B|=|B-A|差运算结果为非负数。如
2~6=6~2=4
1~12=12~1=11
5~2=2~5=3
7.常用值函数说明:I所有返回为数值的函数都可以继续参与到表达式和函数里)
6.1最小值函数min(表达式1,表达式2,...)或者中文“最小值”取括号里面的最小值,
元素个数可以不定。
Min(5,6,2)=2
Min(12,8)=8
最小值($5,3)=3 //返回$5元素值和3中最小的一个值
最小值($1,$2)表示取第一个第二个两个初始码中的最小值,如$1=8,$2=6则值为6
6.2最大值函数:max(表达式1,表达式2,…)中文函数名为:最大值(表达值组)
max(5,6,2)=6
max(12,8)=12
最小值($1,$2)表示取第一个第二个两个初始码中的最小值,如$1=8,$2=6则值为8
6.3最接近数(nearest):参数个数可变,形式为nearest(参考值,下标列表),下标列表之间用逗号分隔,只有一个参数,没有下标列表则表示包含所有的初始码下标。在指定的下标列表中返回最接近参考值的值。也就是和参考值差值最小的值。如果有值等于参考值该函数返回参考值。
nearest(5) //无下标列表,表示所有,返回初始码表中最接近5的值,则返回5.
nearest(5,1,2,3) //返回第一行中所有最接近5的值。如$3=5则直接返回5
6.4最接近数所在下标(posbynearest)参数个数可变,形式为posbynearest(参考值,下标列表)。其它同上函数,只是返回的值最近值所在的下标号,而不是下标自身的值。如果有多个最接近值,则按参数列表中先后顺序,返回最前面的位置号。
posbynearest(5,0) //返回初始码表中最接近5的下标,$3,$7都为5,则返回3.
posbynearest(5,7,3) //由于参数中7在前,则返回7
posbynearest(7,1,2,3) //$1,$2均和7相差1,但$1在前,则返回1
用户想R1的规则是从第一列中取出最接近6的值的位置,然后取后移一个位置上的值。则可以表达为
R1=$(posbynearest(6,1,4,7)+1)=$(7+1)=$8=6
查指定值所在下标(posby)跟这个类同,只是按准确值来找,没有则返回缺省下标。
6.5最小值所在下标(posbymin)参数个数可变,形式为posbymin(下标列表)。由于初始码元素最大值为9,最小值为0,实质上与posbynearest(0,下标列表)等价。
6.6最大值所在下标(posbymax)参数个数可变,形式为posbymax(下标列表)。由于初始码元素最大值为9,最小值为0,实质上与posbynearest(9,下标列表)等价。
6.7条件函数(if)形式为if(关系表达式,表达式1,表达式2)。如果关系表达式为真,或者非0,则返回表达式1的值,否则返回表达式2.这个函数和上面的位置函数一样因为具有跳跃功能,所以有很强的抗攻击能力。
如用户想根据第一个值来判断,如果大于6,则取第3个初始码元素的值,否则取第9个初始码元素的值。则表达式为
if($(1)>6,$(3),$(9))
由于返回结果为数值,所以也可以层层嵌套,如用户想根据$1元素的值,如果$1值为[0,1,2]当中任一值时,则返回8,为[3,4]时返回2,其余返回7,则可以这样表达
if($(1)<3,8,if($(1)<5,2,7))
6.8乘幂(power),参数个数为2个,形式为power(底数,指数).如power(5,2)=25,power(3,2)=9.
6.9平方根(sqrt):参数一个,返回值取整,没有小数,如sqrt(13)=3,sqrt(20)=4,
sqrt(9)=3.初始码元素$6=2,$4=3,则sqrt($6$3)=sqrt(23)=4
6.10日期函数,星期(week),月(month),天(day),小时(hour):均为无参数,因为它的作用仅仅是多了一个变量而已,所以起的安全作用有限,可以不添加此功能。如是4月23日13时且是星期六时
day()=23
week()=6 //从1到7
hour()=13 //24制式,从0~23
假设有个规则为如下
R1=min($1,$2)+3
R2=day()+$1
R3=$9~$7 //差值
R4=d //固定码
R5=T //固定码
当初始码为如下所示时,且为23号时
R1=min($1,$2)+3=min(8,6)+3=6+3=9
R2=day()+$1=23+8=31=1
R3=1~5=4
所以返回码为914dT
注意上述时间函数,特别是取小时,应该慎用,应该注意避免在快要变更时操作。如在1:59时,就容易发生到底验证错误,所以以提交到服务器时的时间为准。
还有其它很多实用的值函数,如个数统计函数(count),矩阵移位相关函数,虽然这些函数都可以通过基本表达式实现,但提供的话可以简化用户的设计。特定值个数统计函数(count)可以用来统计某个值在某些区域上出现的个数,还有用于在矩阵中快速定位的函数,行列(rowcol),它可以用行列坐标转化成线性坐标,可以帮我们快速定位设计,形式为rowcol(行号,列号),行号,列号均为1开始,在3X3形式时,rowcol(2,1)=(2-1)X3+1=4,rowcol(1,1)=1,rowcol(1,3)=3,$(rowcol(2,1))=$(4),同样里面的行列参数均为数字,所以也可以是复杂的表达式,上述很多实现可以通过来替换后,将更加直观了。还有下标高低偏移函数rightcircleoffset(pos,offset)是按标号循环移动,如rightcircleoffset(1,2)表示返回下标3,rightcircleoffset(1,9)则对于九宫格,还是返回1,因为正好循环了一周.
行右(左)循环移动函数RowRightCircle(pos,offset):是固定行号不变循环移动多少列,如RowRightCircle(4,2)=6;RowRightCircle(6,1)=4跳回到左边第一列同理还列循环下(上)移动函数,是固定某个列,移动行号,这些函数组合起来可以直观快速移动到任意位置,而不必写复杂易错的基本表达式来实现。
取IP地址函数,这个函数可以允许用户将自身IP地址的某部分参与变形运算,运营商根据用户按规则加密的IP地址和实际通讯地址,就可以使“运营商←→黑客←→用户”模式失效。注意用户的IP地址一般不能用ipconfig获取,应该通过第三方网站获取。不过这种实时转发劫持极不常见,一般可以不用提供。
还有可以提供返回值为ASCII串函数,实现从数字到字符的转化,这个不能再直接参与表达式的运算而是只能是“结果码元素=字符函数(表达式列表)”的形式,如某函数根据根据3个可能结果,返回对应的字符串,表现形式类似“R1-3=某字符函数(判定值%3,”ABC”,”BCD”,”CDE”)”,但这个从安全性上来说,提升不是非常显著,和付出相应的复杂度代价而言并不匹配,也不一定需要提供。
8.初始函数:初始函数不同普通函数,它必须放在所有规则之前,用来初始化用,并不返回 值。
8.1删除值(del),形式为del(参考值,下标列表),删除下标所指当中的所有包含该参考值的,然后随机生成其它值(不能是删除的值)来填充。
8.2放置函数(placeone),形式为placeone(参考值,下标列表),将某个参考值,随机放入到下表列表中,只放入一次该值。不检查原来在列表里是否已经有的相同的值,所以执行后,可能该区间里有多个该值,它结合删除函数,它可以实现在特定区域有且只有一个想要的值。如想确保第一行有且只有一个值为3。这个也可以用来验证是否是真的服务器发来的初始码。
del(3,1,2,3)//删除初始码元素$1,$2,$3中包含3的值,重新生成其它数字
placeone(3,1,2,3)//在初始码元素$1,$2,$3当中,随机取出一个元素设为3值
表达式和函数的编译实现:实现编译、语法检查、解析、运行表达式和函数,包括支持中文函数和符号应该来说非常简单,虽然表达式和函数都可以层层嵌套,功能强大,看似复杂,但其文法却较为简单,可以借用javaCC或者lex,yacc很容易搞定,为了运行效率和部分安全的考虑,规则部分在服务器里可以存储编译后的目标代码类似于java的字节码。运行时,用相应的解释器就可以了。限于篇幅和易于理解,相关文法定义略去。
一般来说,用户使用使用2到4个是动态的,其余均为固定的值就可以了。固定的值时,***一般不应该直接明文的方式保存,而是将所有的固定码串在一起然后取它们的单向特征码(如散列操作)保存,这样可以大大加强因为服务器***内部的安全性而导致的泄密。
对于有些用户甚至也不想服务器知道他的规则,也有解决方案,具体是用户在客户端用自己设定的规则预先生成一定数量(如10000个)的初始码和相应的返回码,然后将该初始码和返回码的特征码传回服务器,服务器并不保存规则,在用户登录时,用用户预存的初始码和返回码的特征码进行验证,用完之后,由用户再次生成。这种预先生成的一个限制是不能使用日期相关的函数和集合操作等,此模式下返回码元素也不能出现在赋值表达式的右侧。日期函数实际上对提升安全有限。而且也要求用户用完后必须再次生成,除非他选择随机挑选,则可以一直使用(这样可能会重复)。
初始码展示可以辅助添加一些条形码或二维码,对于ATM机或者和电脑,服务器向用户展示矩阵码的同时,用户也可以设定将初始码以条形码的方式作为辅助展示,这样,他可以利用他自己的手机里安装的辅助软件扫描,和他存储的自定义算法来快速算出规则,当然这个前提是用户对他的手机安全有非常的自信,不怕规则泄露。
如某个用户在他的密码里只想两个是动态码,其余则是固定码,如下,其中下划线表示是动态码的地方
_ABCD33FG_H
R1 | R2 | R3 | R4 | R5 | R6 | R7 | R8 | R9 | R10 | R11 |
A | B | C | D | 3 | 3 | F | G | H |
规则表示为
R1=$($1%3+3)+2 //根据第一个初始码元素的值模3后取对应第二行的值再加2
R2=A //固定密码
R3=B //固定密码部分省略不写
...
R10=$7X$3+5
R11=H
上面也使用另外一个快速表达时,则可以省略为3个表达式。
R1=$($1%3+3)+2
R10=$7X$3+5
R2-9,11=ABCD33FGH //使用区间,省去逐个指定的麻烦,简洁易懂
则***生成的初始码如下时
根据规则可得
R1=$($1%3+3)+2=$(8%3+3)+2=$(2+3)+2=$5+2=4+2=6
R10=$7X$3+5=2X5+5=5
因此密码为:6ABCD33FG5H
这样就算该密码被别人知道,而且就算别人也知道哪两个位置上的值是动态生成的,那么他第一次破解的可能性也就百分之一。连续输入3次成功的可能性(1-0.993)也不到3%,而一般账户输入3~5次后***就会禁止再试来保护账户受到非法攻击了,可以看出尽管中间只有植入两位动态码,账户的安全性也会大大提升。
如果仅仅使用到固定位置方式取值和运算,安全性在ATM机和手持刷卡上差不多足够 了,但在电脑和手机上使用这个时安全性其实不怎么高。一般需要用到变址和函数操作来提高安全性。变址表达式可能看起来有点复杂,但结合矩阵,其实却非常容易理解和记忆。
另外规则设定还可以用使用线条来辅助记忆。非常易于记忆。
如设定规则(如图4所示)为R1=$1~$4~$7//(差值运算与顺序有关)
R1=8~3~2=3//返过来R1=2~3~8=7结果就不一样了
R2=$9~$5~$1~$2
R2=1~4~8~6=1
这里均为差值运算,当然也可以是其它运算符
下面举个安全性较高的设定。用户设置一个结果码元素是根据第一列中最接近3值的位置号再偏移1上的元素的值加上下三角区域的最小值且不大于7的平方在加上它的固定值6,示意如图5所示,表达式可以为
R1=$(posbynearest(3,1,4,7)+1)+power(min(7,$1,$4,$5,$7,$8,$9),2)+6
也可用相应的中文函数表达
R1=$(最接近数所在下标(3,1,4,7)+1)+乘幂(最小值(7,$1,$4,$5,$7,$8,$9),2)+6
当初始码为下面值时,则对应结果
R1=$(4+1)+power(min(7,8,3,4,2,6,1),2)+6
R1=$(5)+power(1,2)+6
R1=4+1+6=1
注,右边第一列中最接近3的值在$4,所以返回它的
位置号4,再偏移一位,就是$5上的值4
上述如果等号左边为R2R1时,则R2=1,R1=1
安全性分析:上述曾提到没有使用没有使用变址和函数的表达式在电脑和手机上使用时有些脆弱,因为当前操作***架构设计的先天不足,使得进程数据、屏幕资源、键盘鼠标的输入容易被恶意程序捕获,这也就是为什么很多网银都要安装各自五花八门的控件来保护它的输入。一个设计良好的操作***,不应该由应用程序自己来费尽心思保护它的输入的信息。 而且安装各种控件对于用户来说也是不爽。既然这些权限是应用程序级别的控件能够保护输入,自然木马也照样具备窃取信息的能力,所以用户在电脑里的所有信息还是有被完全轻松拦截的可能,不管你是用图形鼠标点击方式,还是控件保护模式等等。
当表达式是仅仅是从固定的初始码位置上取出,而且运算符也仅是加减乘除模时,其破解程序的设计实现还是相对简单的,只要被完整拦截下初始码和返回码达到一定数量后,可能就会让规则原形毕露了。破解所需运算数量级也可以通过数学模型容易估出,所以一般较为重要的帐号建议采用变址方式(如简单的变址操作$($(1)),表示根据第一个初始码元素的值,把它作为下标,取对应位置上的初始码元素)或者使用函数(如if等函数就具有极强的安全性),让参与运算的初始码元素位置也是动态变化,这样不但编写破解程序的难度也大大增强,并且破解所需的运算数量级和预先拦截的样本数和采用单纯的定址运算将完全不在同一个数量级上,这里对具体强度分析的数学模型计算不作详细分析。如果服务器允许赋值表达式右边出现返回码元素,则如果右边返回码元素是允许任意值或者某范围内任意值时,相当于增加了初始码元素,而且是用户生成的,也可以加大安全性,但此时运营商必须以知道用户设定的规则,无法采用预先生成大量密码来匹配模式运行,这种模式服务器可以不需要知道用户定义的规则。
另外加大初始码的矩阵尺寸,也可以加强安全性,如用户选择4X4,5X5,甚至更大,可以通过画辅助线或者对相关位置添加辅助标记来加深记忆和快速定位,人类大脑的结构决定了对图形线条记忆能力远超过单纯字母数字组合,只是尺寸越大相对越不容易记忆。如图6所示是未添加和添加辅助标号和线条的一些例子,可以为下标号或者用户自定义字符或者颜色等,这在大矩阵时比较有用,顺便也可以起到验证网站真伪作用,除非约定,辅助信息一般只是起到静态展示提示作用而不能参与运算,不过一般来说建议初始码展示以简单朴素为原则,不应该有过多的辅助信息,就是有也应该尽量采取小字体和弱颜色等视觉影响小的方式,运营商可视情况决定是否提供。关于有效利用变址和函数,来达到既容易记忆,又提高安全(当然表达式设计还是会有些复杂,但却不影响记忆)的有实在太多的技巧,只要用户花点时间适应和熟悉规则后,就会设计出越来越安全的规则,限于篇幅,不再一一累述。
Claims (8)
1.发明名称:自定义双向动态安全认证***,一种密码认证***,其特征在于,允许用户通过自定义算法规则根据服务器发过来的初始码或者自身提供方式来达到每次输入的密码中有部分或者全部是动态算出的,不但因为默认是随机生成的初始码表变化而变化,而且可通过下标表达式化或者函数使参与运算的相关初始码元素的所在位置也是具备动态可变的能力,密码也可以设定为全部都是固定值,完全兼容传统的固定密码方式,用户可以根据自身实际需求,通过设定自己的算法规则来决定其帐号的安全性级别。
2.如权利要求书1所述,其特征是服务提供方可以根据其自身需求将发送给用户的初始码矩阵的大小格式统一(如统一为九宫格方式)或者给予用户自主决定权(需要更多干扰码来提升安全性的用户,就可以选择更大尺寸的码表,如4X4,6X6,各初始码元素可以通过添加辅助信息实现快速定位,也可无任何辅助信息),初始码中元素的值默认均为随机生成,也允许用户对其赋予规则来生成,以达到实现对服务器的真伪进行校验或者其它目的。
3.如权利要求书1所述,利用自定义的表达式预先生成大量初始码和返回码的方式,也是属于本***的一种实现,其特侦是,通过利用规则生成器预先生成大量的初始码表和与其对应的密码,其中密码可以通过单向变换加密后,保存到服务器,这样验证时服务器并不需要知晓用户的算法规则,以后用户登录就从预先生成的库中选取。
4.如权利要求书1所述的密码认证***,其特征是根据用户帐号,向用户发送初始码,用户根据自定义规则对初始码或者其它信息处理,算出返回码,再向***返回认证信息,***根据初始码和用户输入的返回码,结合用户定义的规则来验证,通过支持各种运算符和函数,支持符合语法的层层嵌套的表达式来达到加密变换目的,每个返回码元素可以由多项元素根据表达式共同决定。
5.如权利要求1所述的密码认证***,其特征是,初始码上的元素值默认为随机生成,每个元素长度均为1,取值范围为数字0到9中的任意值,但用户也可以干预初始码元素的生成规则,以用户期望的方式生成,这也是本***的一种实现方式。
6.如权利要求1所述的密码认证***,其特征是,参与运算的初始码元素下标可以通过表达式具备动态可变的能力。
7.如权利要求2所述的初始码,其特征是,服务器向用户发送的初始码矩阵,大小可以由服务器统一固定,或给予用户自由决定权,根据服务器设计而定。
8.如权利要求2所述,若服务器提供允许,用户可以在初始码表中添加不参与实质计算的辅助信息,或者包含初始码值的条形码或二维码以方便部分用户借助其它设备来辅助计算的,也是属于本***的一种实现。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410195687.9A CN103957106B (zh) | 2014-03-14 | 2014-05-11 | 自定义双向动态安全认证*** |
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2014100950502 | 2014-03-14 | ||
CN201410095050 | 2014-03-14 | ||
CN201410095050.2 | 2014-03-14 | ||
CN201410195687.9A CN103957106B (zh) | 2014-03-14 | 2014-05-11 | 自定义双向动态安全认证*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103957106A true CN103957106A (zh) | 2014-07-30 |
CN103957106B CN103957106B (zh) | 2017-05-31 |
Family
ID=51334336
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410195687.9A Active CN103957106B (zh) | 2014-03-14 | 2014-05-11 | 自定义双向动态安全认证*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103957106B (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104320767A (zh) * | 2014-11-10 | 2015-01-28 | 吴东辉 | 一种短信验证***及验证方法 |
CN106650397A (zh) * | 2016-12-28 | 2017-05-10 | 深圳天珑无线科技有限公司 | 基于图案锁的密码生成方法、装置及终端 |
CN106850235A (zh) * | 2017-04-08 | 2017-06-13 | 普拉斯旺(深圳)商贸有限公司 | 一种身份认证方法 |
CN106936590A (zh) * | 2017-04-26 | 2017-07-07 | 郭至涵 | 用户合法性验证方法和装置 |
CN107590372A (zh) * | 2017-09-06 | 2018-01-16 | 叶进蓉 | 触摸屏加密解锁方法及装置 |
CN110084031A (zh) * | 2019-04-24 | 2019-08-02 | 四川吉赛特科技有限公司 | 一种认证逻辑可自定义的信息***账号安全认证平台 |
CN110545181A (zh) * | 2019-10-14 | 2019-12-06 | 邯郸学院 | 一种用于创建和使用多级矩阵密码的方法 |
CN111163082A (zh) * | 2019-12-27 | 2020-05-15 | 咪咕文化科技有限公司 | 一种验证码的生成、验证方法、电子设备及存储介质 |
WO2022121664A1 (en) * | 2020-12-11 | 2022-06-16 | International Business Machines Corporation | User configured one-time password |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1533072A (zh) * | 2003-03-25 | 2004-09-29 | ��Ϊ��������˾ | 一种使用用户标识模块信息进行用户认证的方法 |
CN102638447A (zh) * | 2012-02-10 | 2012-08-15 | 宗祥后 | 基于用户自主产生的口令对***登录的方法和装置 |
-
2014
- 2014-05-11 CN CN201410195687.9A patent/CN103957106B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1533072A (zh) * | 2003-03-25 | 2004-09-29 | ��Ϊ��������˾ | 一种使用用户标识模块信息进行用户认证的方法 |
CN102638447A (zh) * | 2012-02-10 | 2012-08-15 | 宗祥后 | 基于用户自主产生的口令对***登录的方法和装置 |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104320767A (zh) * | 2014-11-10 | 2015-01-28 | 吴东辉 | 一种短信验证***及验证方法 |
CN106650397A (zh) * | 2016-12-28 | 2017-05-10 | 深圳天珑无线科技有限公司 | 基于图案锁的密码生成方法、装置及终端 |
CN106650397B (zh) * | 2016-12-28 | 2019-12-13 | 深圳市忆捷创新科技有限公司 | 基于图案锁的密码生成方法、装置及终端 |
CN106850235A (zh) * | 2017-04-08 | 2017-06-13 | 普拉斯旺(深圳)商贸有限公司 | 一种身份认证方法 |
CN106936590A (zh) * | 2017-04-26 | 2017-07-07 | 郭至涵 | 用户合法性验证方法和装置 |
CN107590372A (zh) * | 2017-09-06 | 2018-01-16 | 叶进蓉 | 触摸屏加密解锁方法及装置 |
CN110084031B (zh) * | 2019-04-24 | 2022-10-14 | 四川吉赛特科技有限公司 | 一种认证逻辑可自定义的信息***账号安全认证的方法 |
CN110084031A (zh) * | 2019-04-24 | 2019-08-02 | 四川吉赛特科技有限公司 | 一种认证逻辑可自定义的信息***账号安全认证平台 |
CN110545181A (zh) * | 2019-10-14 | 2019-12-06 | 邯郸学院 | 一种用于创建和使用多级矩阵密码的方法 |
CN110545181B (zh) * | 2019-10-14 | 2020-05-05 | 邯郸学院 | 一种用于创建和使用多级矩阵密码的方法 |
CN111163082A (zh) * | 2019-12-27 | 2020-05-15 | 咪咕文化科技有限公司 | 一种验证码的生成、验证方法、电子设备及存储介质 |
CN111163082B (zh) * | 2019-12-27 | 2022-03-25 | 咪咕文化科技有限公司 | 一种验证码的生成、验证方法、电子设备及存储介质 |
WO2022121664A1 (en) * | 2020-12-11 | 2022-06-16 | International Business Machines Corporation | User configured one-time password |
US11645381B2 (en) | 2020-12-11 | 2023-05-09 | International Business Machines Corporation | User configured one-time password |
Also Published As
Publication number | Publication date |
---|---|
CN103957106B (zh) | 2017-05-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103957106A (zh) | 自定义双向动态安全认证*** | |
US11206256B2 (en) | Table-connected tokenization | |
US10021085B1 (en) | Encryption and decryption techniques using shuffle function | |
US20130103685A1 (en) | Multiple Table Tokenization | |
CN106161006B (zh) | 一种数字加密算法 | |
Zhang et al. | Image encryption algorithm based on DNA encoding and chaotic maps | |
US20140177825A1 (en) | Asymmetric Tokenization | |
EP3535680A1 (en) | Method for securing a transaction performed from a non-secure terminal | |
WO2014188210A1 (en) | User authentication system and method | |
US10068106B2 (en) | Tokenization column replacement | |
CN102202067A (zh) | 动态随机密码登录方法 | |
CN104537300A (zh) | 安全密码设置及验证方式 | |
CN104966026A (zh) | 数学运算*** | |
WO2017084572A1 (zh) | 一种明文密码的加密方法 | |
CN103607274B (zh) | 一种以静态密码为源生成动态密码的方法 | |
CN104408363A (zh) | 安全密码*** | |
US10133860B2 (en) | Computer implemented systems and methods for generating and recovering an authorization code | |
US20190258829A1 (en) | Securely performing a sensitive operation using a non-secure terminal | |
CN108537038A (zh) | 自定义规则密码管理方法、装置、终端设备及存储介质 | |
CN104318461A (zh) | 一种基于密码机和USBKey的防伪码生成与验证方法 | |
KR101749304B1 (ko) | 비밀번호 인증 보안 향상 방법 및 서버 | |
CN111092721B (zh) | 一种设置访问口令的方法及装置 | |
CN104363099A (zh) | 一种手机安全协处理芯片 | |
CN105005743B (zh) | 电话号码漂白和反向漂白方法 | |
Ku et al. | Two-factor authentication system based on extended OTP mechanism |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |