48
第第 第 第第第第

第十一讲 椭圆曲线

  • Upload
    verna

  • View
    73

  • Download
    0

Embed Size (px)

DESCRIPTION

第十一讲 椭圆曲线. 1984 年, Hendrik Lenstra 提出了依靠椭圆曲线性质分解整数的精妙算法。这一发现激发了学者进一步研究椭圆曲线在密码和计算数论的其它应用。. 椭圆曲线密码在 1985 年分别由 Neal Koblitz 和 Victor Miller 提出。椭圆曲线密码方案为公钥机制,提供如同 RSA 一样的功能。但是,它的安全性依赖不同的困难问题,也就是椭圆曲线离散对数问题 (ECDLP) 。. - PowerPoint PPT Presentation

Citation preview

Page 1: 第十一讲 椭圆曲线

第十一讲 椭圆曲线

Page 2: 第十一讲 椭圆曲线

1984 年, Hendrik Lenstra 提出了依靠椭圆曲线性质分解整数的精妙算法。这一发现激发了学者进一步研究椭圆曲线在密码和计算数论的其它应用。

Page 3: 第十一讲 椭圆曲线

椭圆曲线密码在 1985 年分别由 Neal Koblitz 和 Victor Miller 提出。椭圆曲线密码方案为公钥机制,提供如同 RSA 一样的功能。但是,它的安全性依赖不同的困难问题,也就是椭圆曲线离散对数问题 (ECDLP) 。

Page 4: 第十一讲 椭圆曲线

我们知道解决分解整数问题需要亚指数时间复杂度的算法,而目前已知计算 ECDLP的最好方法都需要全指数时间复杂度。这意味着在椭圆曲线系统中我们只需要使用相对于 RSA 短得多的密钥就可以达到与其相同的安全强度。例如,一般认为 160 比特的椭圆曲线密钥提供的安全强度与 1024 比特 RSA 密钥相当。使用短的密钥的好处在于加解密速度快、节省能源、节省带宽、存储空间。

Page 5: 第十一讲 椭圆曲线

本讲提要 Weierstrass 方程 实域上的椭圆曲线 有限域上的椭圆曲线 椭圆曲线密码 椭圆曲线在分解中的应用

Page 6: 第十一讲 椭圆曲线

1 Weierstrass 方程

是无穷远点。其中,:

有理点的集合是上的的扩域,则是若

下:的判别式,具体定义如是,且,,,,其中,

由下述方程定义:上的椭圆曲线域

}{0} ),{( = )(

4 4

2 4

9278

0

:

64223

312

24

232431626

2186

236

31442212

64236

348

22

64321

642

23

312

axaxaxyxy+a+ayLL yxLE

LEKL

aaaaaaaaaadaad

aaadaad

ddddddd

EKaaaaa

x+a+ax+ay=xxy+a+ayE

EK1定义

Page 7: 第十一讲 椭圆曲线

有理点。上的的所有扩域,并认为无穷远点是点的属于和且坐标有理点是满足曲线方程的曲线

远点。是曲线唯一的一个无穷点以上不同的切线。有点都没有两个或两个

”的,即曲线的所“确保椭圆曲线是 光滑条件

的基础域。为的元素。均为域,,,,为系数上的椭圆曲线,这是因是域我们称

方程。中的方程称为

LLKyx

LyxLE

E KKaaa

aaKE

) ,(

(5)

(4)

0 (3)

(2)

sWeierstras (1)

643

21

1定义 .评述

Page 8: 第十一讲 椭圆曲线

2 实域上的椭圆曲线2.1 简化 Weierstrass 方程

)274(16 :

24

124

216

3

36

123),(

:

2332

3213112

21

642

23

312

ba+ax+b=xyE

aaaaxayaaxyx

x+a+ax+ay=xxy+a+ayE

这里

Page 9: 第十一讲 椭圆曲线

2.2 实域上的椭圆曲线73: (b) : )a( 32

232

1 xyExxyE ;

Page 10: 第十一讲 椭圆曲线

2.3 加法法则

Page 11: 第十一讲 椭圆曲线

弦和切线法则

。表示如上图点。这一几何轴的对称点就是则这个交点关于

圆曲线相交于第三点,的直线,这条直线与椭和画一条连接按如下方法求出。首先的和与

则上的两个不同的点。是椭圆曲线,和,法说明。令加法法则最好用几何方

(a)

)( =

) ( = (1)

22

11

Rx

Q

PRQP

EyxQ

yxP

2.3 加法法则 ( 续 )

Page 12: 第十一讲 椭圆曲线

弦和切线法则 ( 续 )

。何表示如上图点。这一几轴的对称点就是点,这个交点关于

二线与椭圆曲线相交于第圆曲线的切线,这条切点做椭。首先,在的倍点按如下方法求出

(b)

(2)

Rx

PRP

2.3 加法法则 ( 续 )

Page 13: 第十一讲 椭圆曲线

。,。因此,。我们有的第三点有线相交是重根。椭圆曲线与直。得到

的方程可以。代入是在这种情况下,直线

。,因此,

的方程求导数得到:对的斜率可以通过点的椭圆曲线。自加倍点假定我们做

。,。因此,,我们有。由于有线相交于第三点。因此,椭圆曲线与直得到

的方程。代入是的直线和。通过,和,。令被定义为假定一条椭圆曲线

)11672(61172

473)3)4(8(

3)4(8

82

332

)(

)3 4(374

737)(

7 10)(3Q

9) (273

32

22

32

32

Ryx

xx

ExyL

y

x

dx

dydxxydy

E

ERR

Ryxyx

xx

ExyLQP

Px yE1例子

2.3 加法法则 ( 续 )

Page 14: 第十一讲 椭圆曲线

共线。,,。,也可以简化为相加两个点相减

。,,。因此,我们定义如同整数加法中的用

起到了加法单位元的作,,,由于。

GQPGQP

QPQP

yxyx

yxyx

PP

)3(

) (

) ()(

)0(

) ()( )2(

(1)

.评述2.3 加法法则 ( 续 )

Page 15: 第十一讲 椭圆曲线

代数公式

)2/()3(

)/()(

)(

)(

)( )(

121

1212

1313

212

3

33

2211

32

。,有任意点有一条附加法则:对于

。如果如果

并且

这里,,

则。,,,

确定并令由方程令椭圆曲线

PPP

QPyax

QPxxyym

yxxmy

xxmx

yxRQP

yxQyx P

baxxyE

.加法法则

2.3 加法法则 ( 续 )

Page 16: 第十一讲 椭圆曲线

上的点构成阿贝尔群。椭圆曲线。

加法法则符合交换律。

加法法则符合结合律:

E

PQQP

RQPRQP

(3)

: )2(

)( )(

(1)

.评述2.3 加法法则 ( 续 )

Page 17: 第十一讲 椭圆曲线

3 有限域上的椭圆曲线3.1 模素数 p 的椭圆曲线, p≠2, 3情形3.1.1 加法法则

。,这里应该被看成数

曲线公式相同,除了实与前面给出的实域椭圆法法则的代数公式的椭圆曲线上的点的加模

)1(mod 11 pbbaba/b

p

Page 18: 第十一讲 椭圆曲线

。,,,,,,,,,,,,,,,,,,,,,

,,,,,,,,,,,,,,,

上全部的点为:。,考虑椭圆曲线和令

22) (24 13) (19 27) (15 6) (13 17) (6 10) (4 24) (1

7) (24 19) (17 2) (15 25) (10 12) (6 28) (3 5) (1

26) (20 10) (17 23) (14 4) (10 22) (5 1) (3 22) (0

27)(27 3) (20 27) (16 6) (14 19) (8 7) (5 23) (2 7) (0

2) (27 16) (19 2) (16 23) (13 10) (8 19) (4 6) (2 ∞

)29(mod204 : 204 32

E

x + + = xyEb=a=2例子3.1.2 例子

Page 19: 第十一讲 椭圆曲线

。,,这意味着

因此,

斜率是。如果需要计算。,,,

这意味着。

因此,

斜率是。,,如果需要计算。被定义为假定

1) (34) 2(1

)5(mod1)( )5(mod3

5) 0(mod42

23

4) 2(1,

0) (21) (34) (1

)5(mod0)( )5(mod2

5) 1(mod13

41

3) (14) (1

)5(mod32

1313212

3

1313212

3

32

yxxmy xxmx

m

yxxmy xxmx

m

xxyE3例子3.1.2 例子 ( 续 )

Page 20: 第十一讲 椭圆曲线

3.2 有限域 GF(2n) 上的椭圆曲线

,这该如何处理?实际就是下,由于在模求导数是。例如,对的形式需要做一些修改

下计算,椭圆曲线方程如果在模

02202

22

32

yy

y

baxxy

Page 21: 第十一讲 椭圆曲线

3.2.1 简化 Weierstrass 方程

。这里:

,,超奇异

这里:

,,

非超奇异:

432

2

1

232

31

234

213

11

321

1

642

23

312

)(

)( 0

)(

)( 0

c+ax+bcy=xyE

yaxyx

a

b+b+axxy=xyE

a

aaaya

a

axayx

a

x+a+ax+ay=xxy+a+ayE

Page 22: 第十一讲 椭圆曲线

。,,,最终,。,。,因此,我们需要得到

。,,,我们有。,因此,第三个点应该是

。,,曲线方程,可以得到根代入椭圆。是。通过这两个点的直线,,

。让我们来计算,,,,上的点:我们可以列出所有。:令

)1 0(1) (10) (0

)1 0( 0) (0

1) (10) (00) (0

0) (0

1(mod2) 0 0

1) (10) (0

1) (1 0) (1 1) (0 0) (0

)2(mod 32

RR

x

xy

E

xxyyE4例子3.2.2 加法法则

Page 23: 第十一讲 椭圆曲线

3.2.2 加法法则 ( 续 )

Page 24: 第十一讲 椭圆曲线

) ( )(

/)(

)(

)(2

)/()(

)(

)(

)( )(

21

13132

3

33

1212

1313212

3

33

2211

32

。,有任意点有一条附加法则:对于。,,,对于任何

。并且

其中,,

。并且

其中,,

则。,,,

定义并令由方程令椭圆曲线

PPP

cyxPyxP

caxm

cyxxmymx

yxP

xxyym

cyxxmyxxmx

yxRQP

yxQyx P

baxxcyyE

( ).超奇异 加法法则3.2.2 加法法则 ( 续 )

Page 25: 第十一讲 椭圆曲线

) ,( )(

/

)(2

)/()(

)(

)(

)( )(

111

332132

1

21

23

33

2121

13313212

3

33

2211

32

。,有任意点有一条附加法则:对于。,有,对于任何

。并且

,,。并且

这里,,

则,,,,

定义并令由方程令椭圆曲线

PPP

yxxPyxP

xyxm

xmxxyx

bxammx

yxP

xxyym

yxxxmyaxxmmx

yxRQP

QPyxQyx P

b axxxy yE

).超奇异( 加法法则3.2.2 加法法则 ( 续 )

Page 26: 第十一讲 椭圆曲线

。,,和,,,:椭圆曲线的点计算例子

,,,,,,,,,,,,,,,,,,,,,

上所有点如下:。

上的非超奇异椭圆曲线考虑定义在

。表示,例如,的二进制串为

可表示为长度。元

定义的有限域考虑由既约多项式

0010) (1011 = 1111) 2(0010 0001) (0001 =

1100) (1100+ 1111) (0010

1001) (1011 1100) (0111 1111) (0010 0010) (1011 1011) (0111

1101) (0010 1011) (1111 1111) (1001 0101) (0101

0001) (0001 0100) (1111 0110) (1001 0000) (0101

0000) (0001 1100) (1100 1001) (1000 1111) (0011

1011) (0000 0000) (1100 0001) (1000 1100) (0011 ∞

)1( :

)GF(2

1 (0101) )(4

)GF(2 )GF(2

1= )(

32332

4

20123

401

22

33

4

4

E

+z+x+z+xy=xyE

+zaaaa

z+a+az+aza

+z +zzf

5例子3.2.3 例子

Page 27: 第十一讲 椭圆曲线

3.3 点的数量

区间。称为,区间

上的椭圆曲线。则是令的阶。上也被称为

,上点的数量定义为上的椭圆曲线。为有限域令

Hasse]2121[

2121

)GF( )(

)GF(

# )GF(

q+q +qq +

q+q +#E qq +

qE

Eq

EEqE

Hasse定理1定理

Page 28: 第十一讲 椭圆曲线

。的系数的阶上的椭圆曲线

限域,下表给出了定义在有内的整数

,区间对于每个定义在。令

),(# :

GF(37) ]372137

372137[Hasse 37 =

32 baE = n +ax +b = xyE

n++

+p 6例子3.3 点的数量 ( 续 )

Page 29: 第十一讲 椭圆曲线

3.4 椭圆曲线上的离散对数

10) (17 = 31 7) (5 = 23 1) (3 =15 22) (24 = 7

7) (24 = 30 28) (3 = 22 22) (5 = 14 19) (17 = 6

19) (8 = 29 7) (0 = 21 27) (16 =13 12) (6 = 5

24) (1 = 36 6) (14 = 28 27) (27 = 20 13) (19 = 12 27) (15 = 4

10) (4 = 35 6) (13 = 27 6) (2 = 19 25) (10 = 11 3) (20 = 3

26) (20 = 34 4) (10 = 26P 23) (2 = 18 23) (13 = 10 19) (4 = 2

2) (15 = 33 16) (19 = 25 2) (27 = 17 23) (14 = 9 5) (1 = 1

17) (6 = 32 2) (16 = 24 22) (0 = 16 10) (8 = 8 = 0

5)(1 =

37 =# 204GF(29) 32

,,,,,,,,,,,,

,,,,,,,,,,,,,,,,,,,,,,,,

上的点。产生的所有,下面给出了由点。的:上的椭圆曲线有限域

P PP P

PPPP

P PP P

PP PP P

PPP PP

PPPP

PPP PP

PPPP P

EP

Ex ++ = xyE

7例子

Page 30: 第十一讲 椭圆曲线

生日攻击。指数索引。

必须有大的素数因子。的最小整数。满足是为椭圆曲线并令攻击。令

离散对数问题。就被称为椭圆曲线上的。找到这个满足个整数

并且我们知道有某和假定有椭圆曲线上的点

(3)

(2)

Hellman-Pohlig (1)

nnP

nE

kPPPkPBk

BP

.评述

3.4 椭圆曲线上的离散对数 ( 续 )

Page 31: 第十一讲 椭圆曲线

4 椭圆曲线密码4.1 明文表示

只需要简单计算恢复出明文消息,我们,为了从点。方根或程,直到我们发现了平我们可以重复上面的过

。并尝试新的加我们就对否则,;则我们得到存在,的平方根。如果平方根

并尝试计算计算,,,,对于

。里,这将可以表示为。满足假定

数。的大整作为失败率是可以接受是一个如果将轴,令

可以嵌入一个点的。明文消息考虑

K

x

myxP

Kj

xj

yxPypb

axxbaxxKj

Kj

jmKxmpKmm

Kx

mpbaxxy

m

m

K

)(

(3)

1

),( )(mod

110 (2)

0

)1( (1)

21/

)(mod

33

32

Page 32: 第十一讲 椭圆曲线

得以恢复。。消息可以通过,。因此,,而到

,我们得。对于,,,的可选值就是,则。假定待加密的消息是我们要求,

。由于,则可以令如果我们允许失败率为

。:上的椭圆曲线定义在

510/5111)(51

)179(mod12111)179(mod12172

515951505

160 179

101/2

72 (179)

23

10

32

mP

x ++x

xx

mm K

mKK

x ++ = xyEGF

m

8例子4.1 明文表示 ( 续 )

Page 33: 第十一讲 椭圆曲线

4.2 椭圆曲线 ElGamal 密码系统

线上的点乘计算。将模幂计算变成椭圆曲线上的点加计算。将模乘计算变成椭圆曲

曲线密码方案:成椭圆的离散对数密码方案变存在一般的方法将经典

(2)

(1)

Page 34: 第十一讲 椭圆曲线

。,秘密密钥是的公开密钥是。并计算选择

做如下步骤:每个实体的阶。上的点曲线

是椭圆对应秘密密钥,这里产生自己的公开密钥和下,,开椭圆曲线参数摘要:每一个实体在公

密钥对产生椭圆曲线

dQA

dPQ nd

A

PE

n

nPE

(2)

11 (1)

)(

ElGamal

1算法4.2 椭圆曲线 ElGamal 密码系统 ( 续 )

Page 35: 第十一讲 椭圆曲线

。中提取明文消息,并从计算应该做如下步骤:出明文消息,为了从密文消息中恢复

。给,发送密文消息。和计算。任意选择一个

。上的点表示为椭圆曲线将明文消息。公开密钥和,,数真实的公开椭圆曲线参得到

做如下步骤:解密之。,给实体加密一条消息摘要:实体

加密椭圆曲线

mMdCCM

A

ACC

M +kQC = kPC

nk

MEm

QnPEA

B

AAmB

12

21

21

(1)

)( (5)

= )4(

11 )3(

(2)

)( (1)

ElGamal

.解密

.加密

2算法4.2 椭圆曲线 ElGamal 密码系统 ( 续 )

Page 36: 第十一讲 椭圆曲线

。,,,减掉这一部分得:,他从

,之后,,,则首先计算

。,和,。她计算并发送给并选择一个随机数下载

。,想发送。假定,,并公布随机选择。,系统产生

。:使用曲线

)17435()146672()35766626(

)35766626(

)146672()63215415(3 Bob

)35766626( )63215415(

Bob8

Alice 1743)(5Alice)1808413(

3Bob )11 4(

)8831(mod453

1

21

32

M

dC

kQMCkPC

kQ

MdP

QdP

xxyE 9例子4.2 椭圆曲线 ElGamal 密码系统 ( 续 )

Page 37: 第十一讲 椭圆曲线

4.3 椭圆曲线数字签名算法 (ECDSA)

。,的签名就是对对步。第

,则转移到如果。和计算

步。,则转移到第如果。和,计算。任意选择

做如下步骤:实体。为

,公开密钥的秘密密钥为素阶。是点,,,。假定椭圆曲线参数是的公开密钥验证其签名通过

可以任何实体签名。对一个任意长度的消息摘要:实体签名产生和认证

) ( (4)

(1)

0 ) mod( )()( (3)

(1)0 ) mod()( (2)

11 (1)

11)

( =

ECDSA

1

111

srmA

snre+dksmHe

rnxryxkP

nk

A

dPQ

ndAPnnP

EDA

BmA

.签名产生

3算法

Page 38: 第十一讲 椭圆曲线

拒绝签名。接受签名;否则,返回返回,则。如果轴坐标计算的对

,则返回拒绝签名。。如果计算。

,和,,计算

。失败,则返回拒绝签名上的整数。如果有任何,都是在区间和验证做如下步骤:,,的签名对为了验证

续签名产生和认证

) (mod (4)

)3(

) (mod

) (mod) (mod )( (2)

]1[1 (1)

)(

)(ECDSA

1

21

211

rvnxv xX

X QuPuX

nwr

unweunswmHe

ns r

BsrmA

.认证3算法

。因此,。的

P = kPduuQP +uuX nd +uudrw

e+wrde+ss re+dsk

)+ ( = = )mod(

)(

212121

111

.正确性证明签名认证

4.3 椭圆曲线数字签名算法 (ECDSA)( 续 )

Page 39: 第十一讲 椭圆曲线

5 椭圆曲线在分解中的应用5.1 椭圆曲线分解算法

进一步有,

因此,

斜率:点的,我们实际需要计算在。可以计算。,和,:。令椭圆曲线令

)2773(mod7053)17711(2312

)2773(mod1771112312

)2773 2312(mod231176

7

)2773(mod6

7)43(2

3)(1 2 3)(1

)2773(mod442773

3

23

2

32

y

x

m

dx

dydxxydy

PPPP

xxyEn10例子

Page 40: 第十一讲 椭圆曲线

。。因此,,。然而,我们发现的斜率为,和,。通过点

。现在,继续计算,我们需要这里,。,,

因此,解答是续

47592773

592773) (1770702/1770

3) (1705)(17712 2

31)2773 (6

705)(17713)2(1

)(

PPPP

P

10例子5.1 椭圆曲线分解算法( 续 )

Page 41: 第十一讲 椭圆曲线

算法非常相似。的。这与点的情况出现或模这样的乘法使模,做点乘法。希望通过

数因子的整数,例如,通常与一个有大量小素在实践中,点。或最大公约数可以分解出

了使用周期不相同。这就导致和模不断倍加过程中,模的点上,是希望对椭圆曲线使用椭圆曲线分解整数

。不为模的情况,但另一个分母为分母模了一个。换句话,我们先发现,而

的曲线。我们发现和曲线,也就是看作两条椭圆们可以把例子中的使用中国剩余定理,我

1Pollard

1000!

(3)

) (mod (2)

047059

47) (mod459) (mod

347) (mod 59) (mod

(1)

p

qp

P

qp

qpP

pqEpq

P

P

E

.评述5.1 椭圆曲线分解算法( 续 )

Page 42: 第十一讲 椭圆曲线

。我们可以找到分解因子,因此,的倍数而不是是。由于上满足

在是最小的正整数,而上满足在是最小的正整数个点。进一步,有个点,而有

。计算显示为我们可以分解,,的逆。由于时需要计算但是计算

都一切正常,这样做下去,到。,,,我们计算。假定我们设法计算

。,和:

选择。我们想分解

599

777640 8!

761) (mod 777

599) (mod 6403773

777761) (mod 52640599) (mod

761599455839 599)

(599) 599(mod8!

7! )3!(44!

)2!(33! 2! !10

1) (1 55

455839

7

32

mP

EmmP

Em

E

En

nP

PPP

PPPP

Pxx yE

n

11例子5.1 椭圆曲线分解算法( 续 )

Page 43: 第十一讲 椭圆曲线

是小素数的乘积。的整数或得条曲线使,则非常可能有至少一,这里多条曲线解因子。如果我们尝试解方法应该可以发现分况下,分着在选择这样曲线的情小素数的乘积。这意味是许多整数,则非常有机会可以使选择曲线

如果随机的附近的整数。是一个在说明。数。因此,

的倍有可能是并不是非常大的情况下在乘积,则是一组小素数的。如果,因此,有点的数量

必然可以整除曲线上足最小正整数在曲线上满。形成的椭圆曲线一般情况下,考虑素数

NqEpE

qpnnE

NpE

pN

PB

NBB

NNPN

mP

pEp

) (mod ) (mod

) (mod

) (mod

(2)

!

!

) (mod (1)

Hasse定理

.评述5.1 椭圆曲线分解算法( 续 )

Page 44: 第十一讲 椭圆曲线

位十进制数。到规模的整数,也就是等解方法非常适合分解中经验表明,椭圆曲线分

整数。解为小素数的乘积的附近有足够多的可以分求在

要而椭圆曲线分解方法仅必须是小素数的乘积,分解方法要求的方法的好处是,

线分解分解方法比较,椭圆曲的与

50 40

(4)

11Pollard

1Pollard (3)

p

pp

p

5.1 椭圆曲线分解算法( 续 )

Page 45: 第十一讲 椭圆曲线

5.2 退化曲线

。需要当且仅当有重根的条件只的情况下计算,因此,在模

由于我们是,会发生怎样的情况?

有重根,也就是,式实际上,如果三次多项

) (mod0

0274 23

3

n

qpn

ba

bax x

Page 46: 第十一讲 椭圆曲线

458081806080108808080

816010880

20)01(4101)2(113141)2(22)1(

)143(mod80))1(3/())1(3()143(mod82

3 )143(mod382 2) ,1( 143) (mod

0)(1

)1(3

)1(3

)(

)2()1(23

54321

2

232

,,,,。,

因此,。。和点考虑

。应于这个数的乘法操作计算对以外,在曲线上的点加,我们可以发现,除点

,我们可以构造数,点给出这条曲线上的一个。

看下面的例子:

PPPP

xyxy

xy

xy

yx P

xxxx y

12例子

5.2 退化曲线 ( 续 )

Page 47: 第十一讲 椭圆曲线

线分解算法之中。测试将都包含在椭圆曲方法和除法的,可以看到如果允许使用退化曲线

试分解算法。这是最原始的除法测,直到发现分解因子。,,,,

,,是连续计算算法计算。这实际上就以使用扩展的逆,可模和法实际需要发现的加法。因此,这一方

数。曲线上的点加对应于,,,,是注意相应的数

。,,,,,,,,

做连续加法:,。让我们从点构造数,可以,对于曲线的点这个曲线有三个重根。

。考虑

1Pollard

)(4)(3

)(2Euclidean

321

11

27

1

9

13

8

1

4

121)(1

1) (1

0)(0),(

32

32

32

p

nn

n

nmm

x/ymx/y

mmmPPPP

Px/y

yxP

x y

.评述

13例子

5.2 退化曲线 ( 续 )

Page 48: 第十一讲 椭圆曲线

谢谢 !