TPTP Problem File: SWW953+1.p
View Solutions
- Solve Problem
%--------------------------------------------------------------------------
% File : SWW953+1 : TPTP v9.0.0. Released v7.4.0.
% Domain : Software Verification
% Problem : Attack on KCLL06 protocol
% Version : [LT19] axioms : Especial.
% English : Attack demonstrates violation of aliveness property of reader
% guaranteed to tag.
% Refs : [BO97] Bull & Otway (1997), The Authentication Protocol
% : [RS98] Ryan & Schneider (1998), An Attack on a Recursive Auth
% : [LT19] Li & Tiu (2019), Combining ProVerif and Automated Theo
% : [Li20] Li (2020), Email to Geoff Sutcliffe
% Source : [Li20]
% Names : KCLL06-reader-auth.p [LT20]
% Status : CounterSatisfiable
% Rating : 0.33 v9.0.0, 0.67 v8.1.0, 0.75 v7.5.0, 0.80 v7.4.0
% Syntax : Number of formulae : 168 ( 135 unt; 0 def)
% Number of atoms : 209 ( 117 equ)
% Maximal formula atoms : 3 ( 1 avg)
% Number of connectives : 146 ( 105 ~; 0 |; 8 &)
% ( 0 <=>; 33 =>; 0 <=; 0 <~>)
% Maximal formula depth : 5 ( 2 avg)
% Maximal term depth : 10 ( 1 avg)
% Number of predicates : 4 ( 3 usr; 0 prp; 1-2 aty)
% Number of functors : 36 ( 36 usr; 18 con; 0-2 aty)
% Number of variables : 63 ( 63 !; 0 ?)
% SPC : FOF_CSA_RFO_SEQ
% Comments : Generated by a modified version of ProVerif used in the
% ProVerif-ATP project [LT19].
%--------------------------------------------------------------------------
fof(ax0,axiom,
constr_CONST_0x30 != constr_CONST_1 ).
fof(ax1,axiom,
constr_CONST_0x30 != constr_CONST_2 ).
fof(ax2,axiom,
constr_CONST_0x30 != constr_CONST_3 ).
fof(ax3,axiom,
constr_CONST_0x30 != constr_CONST_4 ).
fof(ax4,axiom,
constr_CONST_0x30 != constr_QUERY_REQ ).
fof(ax5,axiom,
constr_CONST_0x30 != constr_ZERO ).
fof(ax6,axiom,
constr_CONST_0x30 != name_EPC ).
fof(ax7,axiom,
constr_CONST_0x30 != name_PIN1 ).
fof(ax8,axiom,
constr_CONST_0x30 != name_PIN2 ).
fof(ax9,axiom,
constr_CONST_0x30 != name_S ).
fof(ax10,axiom,
constr_CONST_0x30 != name_c ).
fof(ax11,axiom,
constr_CONST_0x30 != name_r1 ).
fof(ax12,axiom,
constr_CONST_0x30 != name_r1_from_1st_round ).
fof(ax13,axiom,
constr_CONST_0x30 != name_r2_from_1st_round ).
fof(ax14,axiom,
constr_CONST_1 != constr_CONST_2 ).
fof(ax15,axiom,
constr_CONST_1 != constr_CONST_3 ).
fof(ax16,axiom,
constr_CONST_1 != constr_CONST_4 ).
fof(ax17,axiom,
constr_CONST_1 != constr_QUERY_REQ ).
fof(ax18,axiom,
constr_CONST_1 != constr_ZERO ).
fof(ax19,axiom,
constr_CONST_1 != name_EPC ).
fof(ax20,axiom,
constr_CONST_1 != name_PIN1 ).
fof(ax21,axiom,
constr_CONST_1 != name_PIN2 ).
fof(ax22,axiom,
constr_CONST_1 != name_S ).
fof(ax23,axiom,
constr_CONST_1 != name_c ).
fof(ax24,axiom,
constr_CONST_1 != name_r1 ).
fof(ax25,axiom,
constr_CONST_1 != name_r1_from_1st_round ).
fof(ax26,axiom,
constr_CONST_1 != name_r2_from_1st_round ).
fof(ax27,axiom,
constr_CONST_2 != constr_CONST_3 ).
fof(ax28,axiom,
constr_CONST_2 != constr_CONST_4 ).
fof(ax29,axiom,
constr_CONST_2 != constr_QUERY_REQ ).
fof(ax30,axiom,
constr_CONST_2 != constr_ZERO ).
fof(ax31,axiom,
constr_CONST_2 != name_EPC ).
fof(ax32,axiom,
constr_CONST_2 != name_PIN1 ).
fof(ax33,axiom,
constr_CONST_2 != name_PIN2 ).
fof(ax34,axiom,
constr_CONST_2 != name_S ).
fof(ax35,axiom,
constr_CONST_2 != name_c ).
fof(ax36,axiom,
constr_CONST_2 != name_r1 ).
fof(ax37,axiom,
constr_CONST_2 != name_r1_from_1st_round ).
fof(ax38,axiom,
constr_CONST_2 != name_r2_from_1st_round ).
fof(ax39,axiom,
constr_CONST_3 != constr_CONST_4 ).
fof(ax40,axiom,
constr_CONST_3 != constr_QUERY_REQ ).
fof(ax41,axiom,
constr_CONST_3 != constr_ZERO ).
fof(ax42,axiom,
constr_CONST_3 != name_EPC ).
fof(ax43,axiom,
constr_CONST_3 != name_PIN1 ).
fof(ax44,axiom,
constr_CONST_3 != name_PIN2 ).
fof(ax45,axiom,
constr_CONST_3 != name_S ).
fof(ax46,axiom,
constr_CONST_3 != name_c ).
fof(ax47,axiom,
constr_CONST_3 != name_r1 ).
fof(ax48,axiom,
constr_CONST_3 != name_r1_from_1st_round ).
fof(ax49,axiom,
constr_CONST_3 != name_r2_from_1st_round ).
fof(ax50,axiom,
constr_CONST_4 != constr_QUERY_REQ ).
fof(ax51,axiom,
constr_CONST_4 != constr_ZERO ).
fof(ax52,axiom,
constr_CONST_4 != name_EPC ).
fof(ax53,axiom,
constr_CONST_4 != name_PIN1 ).
fof(ax54,axiom,
constr_CONST_4 != name_PIN2 ).
fof(ax55,axiom,
constr_CONST_4 != name_S ).
fof(ax56,axiom,
constr_CONST_4 != name_c ).
fof(ax57,axiom,
constr_CONST_4 != name_r1 ).
fof(ax58,axiom,
constr_CONST_4 != name_r1_from_1st_round ).
fof(ax59,axiom,
constr_CONST_4 != name_r2_from_1st_round ).
fof(ax60,axiom,
constr_QUERY_REQ != constr_ZERO ).
fof(ax61,axiom,
constr_QUERY_REQ != name_EPC ).
fof(ax62,axiom,
constr_QUERY_REQ != name_PIN1 ).
fof(ax63,axiom,
constr_QUERY_REQ != name_PIN2 ).
fof(ax64,axiom,
constr_QUERY_REQ != name_S ).
fof(ax65,axiom,
constr_QUERY_REQ != name_c ).
fof(ax66,axiom,
constr_QUERY_REQ != name_r1 ).
fof(ax67,axiom,
constr_QUERY_REQ != name_r1_from_1st_round ).
fof(ax68,axiom,
constr_QUERY_REQ != name_r2_from_1st_round ).
fof(ax69,axiom,
constr_ZERO != name_EPC ).
fof(ax70,axiom,
constr_ZERO != name_PIN1 ).
fof(ax71,axiom,
constr_ZERO != name_PIN2 ).
fof(ax72,axiom,
constr_ZERO != name_S ).
fof(ax73,axiom,
constr_ZERO != name_c ).
fof(ax74,axiom,
constr_ZERO != name_r1 ).
fof(ax75,axiom,
constr_ZERO != name_r1_from_1st_round ).
fof(ax76,axiom,
constr_ZERO != name_r2_from_1st_round ).
fof(ax77,axiom,
name_EPC != name_PIN1 ).
fof(ax78,axiom,
name_EPC != name_PIN2 ).
fof(ax79,axiom,
name_EPC != name_S ).
fof(ax80,axiom,
name_EPC != name_c ).
fof(ax81,axiom,
name_EPC != name_r1 ).
fof(ax82,axiom,
name_EPC != name_r1_from_1st_round ).
fof(ax83,axiom,
name_EPC != name_r2_from_1st_round ).
fof(ax84,axiom,
name_PIN1 != name_PIN2 ).
fof(ax85,axiom,
name_PIN1 != name_S ).
fof(ax86,axiom,
name_PIN1 != name_c ).
fof(ax87,axiom,
name_PIN1 != name_r1 ).
fof(ax88,axiom,
name_PIN1 != name_r1_from_1st_round ).
fof(ax89,axiom,
name_PIN1 != name_r2_from_1st_round ).
fof(ax90,axiom,
name_PIN2 != name_S ).
fof(ax91,axiom,
name_PIN2 != name_c ).
fof(ax92,axiom,
name_PIN2 != name_r1 ).
fof(ax93,axiom,
name_PIN2 != name_r1_from_1st_round ).
fof(ax94,axiom,
name_PIN2 != name_r2_from_1st_round ).
fof(ax95,axiom,
name_S != name_c ).
fof(ax96,axiom,
name_S != name_r1 ).
fof(ax97,axiom,
name_S != name_r1_from_1st_round ).
fof(ax98,axiom,
name_S != name_r2_from_1st_round ).
fof(ax99,axiom,
name_c != name_r1 ).
fof(ax100,axiom,
name_c != name_r1_from_1st_round ).
fof(ax101,axiom,
name_c != name_r2_from_1st_round ).
fof(ax102,axiom,
name_r1 != name_r1_from_1st_round ).
fof(ax103,axiom,
name_r1 != name_r2_from_1st_round ).
fof(ax104,axiom,
name_r1_from_1st_round != name_r2_from_1st_round ).
fof(ax105,axiom,
constr_add(constr_ZERO,constr_ZERO) = constr_ZERO ).
fof(ax106,axiom,
! [VAR_X_23] : constr_sub(VAR_X_23,constr_ZERO) = VAR_X_23 ).
fof(ax107,axiom,
! [VAR_X_22] : constr_add(VAR_X_22,constr_ZERO) = VAR_X_22 ).
fof(ax108,axiom,
! [VAR_X_21] : constr_sub(VAR_X_21,VAR_X_21) = constr_ZERO ).
fof(ax109,axiom,
! [VAR_X_19,VAR_Y_20X30] : constr_sub(constr_add(VAR_X_19,VAR_Y_20X30),VAR_Y_20X30) = VAR_X_19 ).
fof(ax110,axiom,
! [VAR_X_16,VAR_Y_17,VAR_Z_18] : constr_add(VAR_X_16,constr_add(VAR_Y_17,VAR_Z_18)) = constr_add(constr_add(VAR_X_16,VAR_Y_17),VAR_Z_18) ).
fof(ax111,axiom,
! [VAR_X_14,VAR_Y_15] : constr_add(VAR_X_14,VAR_Y_15) = constr_add(VAR_Y_15,VAR_X_14) ).
fof(ax112,axiom,
! [VAR_X_11,VAR_Y_12,VAR_Z_13] : constr_concat(constr_concat(VAR_X_11,VAR_Y_12),VAR_Z_13) = constr_concat(VAR_X_11,constr_concat(VAR_Y_12,VAR_Z_13)) ).
fof(ax113,axiom,
! [VAR_X_10X30] : constr_xor(VAR_X_10X30,VAR_X_10X30) = constr_ZERO ).
fof(ax114,axiom,
! [VAR_X_9] : constr_xor(VAR_X_9,constr_ZERO) = VAR_X_9 ).
fof(ax115,axiom,
! [VAR_X_7,VAR_Y_8] : constr_xor(VAR_X_7,VAR_Y_8) = constr_xor(VAR_Y_8,VAR_X_7) ).
fof(ax116,axiom,
! [VAR_X_0X30,VAR_Y_0X30,VAR_Z_0X30] : constr_xor(VAR_X_0X30,constr_xor(VAR_Y_0X30,VAR_Z_0X30)) = constr_xor(constr_xor(VAR_X_0X30,VAR_Y_0X30),VAR_Z_0X30) ).
fof(ax117,axiom,
! [VAR_V_49,VAR_V_50X30] :
( ( pred_attacker(VAR_V_49)
& pred_attacker(VAR_V_50X30) )
=> pred_attacker(constr_xor(VAR_V_49,VAR_V_50X30)) ) ).
fof(ax118,axiom,
pred_attacker(tuple_true) ).
fof(ax119,axiom,
! [VAR_V_53,VAR_V_54] :
( ( pred_attacker(VAR_V_53)
& pred_attacker(VAR_V_54) )
=> pred_attacker(constr_sub(VAR_V_53,VAR_V_54)) ) ).
fof(ax120,axiom,
! [VAR_V_57] :
( pred_attacker(VAR_V_57)
=> pred_attacker(tuple_knowledge_from_1st_round_out_5(VAR_V_57)) ) ).
fof(ax121,axiom,
! [VAR_V_60X30] :
( pred_attacker(tuple_knowledge_from_1st_round_out_5(VAR_V_60X30))
=> pred_attacker(VAR_V_60X30) ) ).
fof(ax122,axiom,
! [VAR_V_63] :
( pred_attacker(VAR_V_63)
=> pred_attacker(tuple_knowledge_from_1st_round_out_4(VAR_V_63)) ) ).
fof(ax123,axiom,
! [VAR_V_66] :
( pred_attacker(tuple_knowledge_from_1st_round_out_4(VAR_V_66))
=> pred_attacker(VAR_V_66) ) ).
fof(ax124,axiom,
! [VAR_V_69] :
( pred_attacker(VAR_V_69)
=> pred_attacker(tuple_knowledge_from_1st_round_out_3(VAR_V_69)) ) ).
fof(ax125,axiom,
! [VAR_V_72] :
( pred_attacker(tuple_knowledge_from_1st_round_out_3(VAR_V_72))
=> pred_attacker(VAR_V_72) ) ).
fof(ax126,axiom,
! [VAR_V_75] :
( pred_attacker(VAR_V_75)
=> pred_attacker(tuple_knowledge_from_1st_round_out_2(VAR_V_75)) ) ).
fof(ax127,axiom,
! [VAR_V_78] :
( pred_attacker(tuple_knowledge_from_1st_round_out_2(VAR_V_78))
=> pred_attacker(VAR_V_78) ) ).
fof(ax128,axiom,
! [VAR_V_81] :
( pred_attacker(VAR_V_81)
=> pred_attacker(tuple_knowledge_from_1st_round_out_1(VAR_V_81)) ) ).
fof(ax129,axiom,
! [VAR_V_84] :
( pred_attacker(tuple_knowledge_from_1st_round_out_1(VAR_V_84))
=> pred_attacker(VAR_V_84) ) ).
fof(ax130,axiom,
pred_attacker(tuple_false) ).
fof(ax131,axiom,
! [VAR_V_87] :
( pred_attacker(VAR_V_87)
=> pred_attacker(constr_f(VAR_V_87)) ) ).
fof(ax132,axiom,
! [VAR_V_90X30,VAR_V_91] :
( ( pred_attacker(VAR_V_90X30)
& pred_attacker(VAR_V_91) )
=> pred_attacker(constr_concat(VAR_V_90X30,VAR_V_91)) ) ).
fof(ax133,axiom,
! [VAR_V_94,VAR_V_95] :
( ( pred_attacker(VAR_V_94)
& pred_attacker(VAR_V_95) )
=> pred_attacker(constr_add(VAR_V_94,VAR_V_95)) ) ).
fof(ax134,axiom,
pred_attacker(constr_ZERO) ).
fof(ax135,axiom,
! [VAR_V_97] :
( pred_attacker(VAR_V_97)
=> pred_attacker(tuple_T_out_6(VAR_V_97)) ) ).
fof(ax136,axiom,
! [VAR_V_10X300X30] :
( pred_attacker(tuple_T_out_6(VAR_V_10X300X30))
=> pred_attacker(VAR_V_10X300X30) ) ).
fof(ax137,axiom,
! [VAR_V_10X303] :
( pred_attacker(VAR_V_10X303)
=> pred_attacker(tuple_T_out_4(VAR_V_10X303)) ) ).
fof(ax138,axiom,
! [VAR_V_10X306] :
( pred_attacker(tuple_T_out_4(VAR_V_10X306))
=> pred_attacker(VAR_V_10X306) ) ).
fof(ax139,axiom,
! [VAR_V_10X309] :
( pred_attacker(VAR_V_10X309)
=> pred_attacker(tuple_T_out_2(VAR_V_10X309)) ) ).
fof(ax140,axiom,
! [VAR_V_112] :
( pred_attacker(tuple_T_out_2(VAR_V_112))
=> pred_attacker(VAR_V_112) ) ).
fof(ax141,axiom,
! [VAR_V_115] :
( pred_attacker(VAR_V_115)
=> pred_attacker(tuple_T_in_5(VAR_V_115)) ) ).
fof(ax142,axiom,
! [VAR_V_118] :
( pred_attacker(tuple_T_in_5(VAR_V_118))
=> pred_attacker(VAR_V_118) ) ).
fof(ax143,axiom,
! [VAR_V_122,VAR_V_123] :
( ( pred_attacker(VAR_V_122)
& pred_attacker(VAR_V_123) )
=> pred_attacker(tuple_T_in_3(VAR_V_122,VAR_V_123)) ) ).
fof(ax144,axiom,
! [VAR_V_130X30,VAR_V_131] :
( pred_attacker(tuple_T_in_3(VAR_V_130X30,VAR_V_131))
=> pred_attacker(VAR_V_130X30) ) ).
fof(ax145,axiom,
! [VAR_V_133,VAR_V_134] :
( pred_attacker(tuple_T_in_3(VAR_V_133,VAR_V_134))
=> pred_attacker(VAR_V_134) ) ).
fof(ax146,axiom,
! [VAR_V_137] :
( pred_attacker(VAR_V_137)
=> pred_attacker(tuple_T_in_1(VAR_V_137)) ) ).
fof(ax147,axiom,
! [VAR_V_140X30] :
( pred_attacker(tuple_T_in_1(VAR_V_140X30))
=> pred_attacker(VAR_V_140X30) ) ).
fof(ax148,axiom,
pred_attacker(constr_QUERY_REQ) ).
fof(ax149,axiom,
pred_attacker(constr_CONST_4) ).
fof(ax150,axiom,
pred_attacker(constr_CONST_3) ).
fof(ax151,axiom,
pred_attacker(constr_CONST_2) ).
fof(ax152,axiom,
pred_attacker(constr_CONST_1) ).
fof(ax153,axiom,
pred_attacker(constr_CONST_0x30) ).
fof(ax154,axiom,
! [VAR_V_143] :
( pred_attacker(VAR_V_143)
=> pred_attacker(constr_ACK(VAR_V_143)) ) ).
fof(ax155,axiom,
! [VAR_V_148,VAR_V_149] :
( ( pred_mess(VAR_V_149,VAR_V_148)
& pred_attacker(VAR_V_149) )
=> pred_attacker(VAR_V_148) ) ).
fof(ax156,axiom,
! [VAR_V_150X30,VAR_V_151] :
( ( pred_attacker(VAR_V_151)
& pred_attacker(VAR_V_150X30) )
=> pred_mess(VAR_V_151,VAR_V_150X30) ) ).
fof(ax157,axiom,
pred_attacker(name_c) ).
fof(ax158,axiom,
! [VAR_V_153] : pred_equal(VAR_V_153,VAR_V_153) ).
fof(ax159,axiom,
! [VAR_V_154] : pred_attacker(name_new0x2Dname(VAR_V_154)) ).
fof(ax160,axiom,
pred_attacker(tuple_knowledge_from_1st_round_out_1(constr_QUERY_REQ)) ).
fof(ax161,axiom,
pred_attacker(tuple_knowledge_from_1st_round_out_2(constr_xor(name_r1_from_1st_round,name_PIN1))) ).
fof(ax162,axiom,
pred_attacker(tuple_knowledge_from_1st_round_out_3(constr_ACK(constr_xor(name_r1_from_1st_round,name_PIN1)))) ).
fof(ax163,axiom,
pred_attacker(tuple_knowledge_from_1st_round_out_4(constr_xor(constr_add(constr_concat(constr_ZERO,constr_concat(name_r1_from_1st_round,constr_concat(constr_xor(constr_xor(name_r2_from_1st_round,name_PIN2),name_r1_from_1st_round),constr_f(constr_xor(constr_xor(name_r2_from_1st_round,name_PIN2),name_r1_from_1st_round))))),name_S),name_EPC))) ).
fof(ax164,axiom,
pred_attacker(tuple_knowledge_from_1st_round_out_5(constr_xor(name_PIN1,constr_f(constr_xor(name_r2_from_1st_round,constr_xor(name_PIN2,name_r1_from_1st_round)))))) ).
fof(ax165,axiom,
( pred_attacker(tuple_T_in_1(constr_QUERY_REQ))
=> pred_attacker(tuple_T_out_2(constr_xor(name_r1,name_PIN1))) ) ).
fof(ax166,axiom,
! [VAR_R2_421] :
( ( pred_attacker(tuple_T_in_3(constr_ACK(constr_xor(name_r1,name_PIN1)),VAR_R2_421))
& pred_attacker(tuple_T_in_1(constr_QUERY_REQ)) )
=> pred_attacker(tuple_T_out_4(constr_xor(constr_add(constr_concat(constr_ZERO,constr_concat(name_r1,constr_concat(constr_xor(constr_xor(VAR_R2_421,name_PIN2),name_r1),constr_f(constr_xor(constr_xor(VAR_R2_421,name_PIN2),name_r1))))),name_S),name_EPC))) ) ).
fof(co0,conjecture,
pred_attacker(name_objective) ).
%--------------------------------------------------------------------------