TPTP Problem File: SWW952+1.p
View Solutions
- Solve Problem
%--------------------------------------------------------------------------
% File : SWW952+1 : TPTP v9.0.0. Released v7.4.0.
% Domain : Software Verification
% Problem : Attack on CH07 protocol
% Version : [LT19] axioms : Especial.
% English : Attack demonstrates violation of aliveness property of tag
% : guaranteed to reader.
% 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 : CH07-tag-auth.p [LT20]
% Status : Theorem
% Rating : 0.61 v9.0.0, 0.64 v8.1.0, 0.61 v7.5.0, 0.72 v7.4.0
% Syntax : Number of formulae : 138 ( 112 unt; 0 def)
% Number of atoms : 171 ( 95 equ)
% Maximal formula atoms : 3 ( 1 avg)
% Number of connectives : 124 ( 91 ~; 0 |; 7 &)
% ( 0 <=>; 26 =>; 0 <=; 0 <~>)
% Maximal formula depth : 5 ( 2 avg)
% Maximal term depth : 8 ( 2 avg)
% Number of predicates : 4 ( 3 usr; 0 prp; 1-2 aty)
% Number of functors : 29 ( 29 usr; 16 con; 0-2 aty)
% Number of variables : 48 ( 48 !; 0 ?)
% SPC : FOF_THM_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 ).
fof(ax5,axiom,
constr_CONST_0x30 != constr_ZERO ).
fof(ax6,axiom,
constr_CONST_0x30 != name_ID ).
fof(ax7,axiom,
constr_CONST_0x30 != name_c ).
fof(ax8,axiom,
constr_CONST_0x30 != name_k ).
fof(ax9,axiom,
constr_CONST_0x30 != name_objective ).
fof(ax10,axiom,
constr_CONST_0x30 != name_r1 ).
fof(ax11,axiom,
constr_CONST_0x30 != name_r1_s1 ).
fof(ax12,axiom,
constr_CONST_0x30 != name_r2_s1 ).
fof(ax13,axiom,
constr_CONST_1 != constr_CONST_2 ).
fof(ax14,axiom,
constr_CONST_1 != constr_CONST_3 ).
fof(ax15,axiom,
constr_CONST_1 != constr_CONST_4 ).
fof(ax16,axiom,
constr_CONST_1 != constr_QUERY ).
fof(ax17,axiom,
constr_CONST_1 != constr_ZERO ).
fof(ax18,axiom,
constr_CONST_1 != name_ID ).
fof(ax19,axiom,
constr_CONST_1 != name_c ).
fof(ax20,axiom,
constr_CONST_1 != name_k ).
fof(ax21,axiom,
constr_CONST_1 != name_objective ).
fof(ax22,axiom,
constr_CONST_1 != name_r1 ).
fof(ax23,axiom,
constr_CONST_1 != name_r1_s1 ).
fof(ax24,axiom,
constr_CONST_1 != name_r2_s1 ).
fof(ax25,axiom,
constr_CONST_2 != constr_CONST_3 ).
fof(ax26,axiom,
constr_CONST_2 != constr_CONST_4 ).
fof(ax27,axiom,
constr_CONST_2 != constr_QUERY ).
fof(ax28,axiom,
constr_CONST_2 != constr_ZERO ).
fof(ax29,axiom,
constr_CONST_2 != name_ID ).
fof(ax30,axiom,
constr_CONST_2 != name_c ).
fof(ax31,axiom,
constr_CONST_2 != name_k ).
fof(ax32,axiom,
constr_CONST_2 != name_objective ).
fof(ax33,axiom,
constr_CONST_2 != name_r1 ).
fof(ax34,axiom,
constr_CONST_2 != name_r1_s1 ).
fof(ax35,axiom,
constr_CONST_2 != name_r2_s1 ).
fof(ax36,axiom,
constr_CONST_3 != constr_CONST_4 ).
fof(ax37,axiom,
constr_CONST_3 != constr_QUERY ).
fof(ax38,axiom,
constr_CONST_3 != constr_ZERO ).
fof(ax39,axiom,
constr_CONST_3 != name_ID ).
fof(ax40,axiom,
constr_CONST_3 != name_c ).
fof(ax41,axiom,
constr_CONST_3 != name_k ).
fof(ax42,axiom,
constr_CONST_3 != name_objective ).
fof(ax43,axiom,
constr_CONST_3 != name_r1 ).
fof(ax44,axiom,
constr_CONST_3 != name_r1_s1 ).
fof(ax45,axiom,
constr_CONST_3 != name_r2_s1 ).
fof(ax46,axiom,
constr_CONST_4 != constr_QUERY ).
fof(ax47,axiom,
constr_CONST_4 != constr_ZERO ).
fof(ax48,axiom,
constr_CONST_4 != name_ID ).
fof(ax49,axiom,
constr_CONST_4 != name_c ).
fof(ax50,axiom,
constr_CONST_4 != name_k ).
fof(ax51,axiom,
constr_CONST_4 != name_objective ).
fof(ax52,axiom,
constr_CONST_4 != name_r1 ).
fof(ax53,axiom,
constr_CONST_4 != name_r1_s1 ).
fof(ax54,axiom,
constr_CONST_4 != name_r2_s1 ).
fof(ax55,axiom,
constr_QUERY != constr_ZERO ).
fof(ax56,axiom,
constr_QUERY != name_ID ).
fof(ax57,axiom,
constr_QUERY != name_c ).
fof(ax58,axiom,
constr_QUERY != name_k ).
fof(ax59,axiom,
constr_QUERY != name_objective ).
fof(ax60,axiom,
constr_QUERY != name_r1 ).
fof(ax61,axiom,
constr_QUERY != name_r1_s1 ).
fof(ax62,axiom,
constr_QUERY != name_r2_s1 ).
fof(ax63,axiom,
constr_ZERO != name_ID ).
fof(ax64,axiom,
constr_ZERO != name_c ).
fof(ax65,axiom,
constr_ZERO != name_k ).
fof(ax66,axiom,
constr_ZERO != name_objective ).
fof(ax67,axiom,
constr_ZERO != name_r1 ).
fof(ax68,axiom,
constr_ZERO != name_r1_s1 ).
fof(ax69,axiom,
constr_ZERO != name_r2_s1 ).
fof(ax70,axiom,
name_ID != name_c ).
fof(ax71,axiom,
name_ID != name_k ).
fof(ax72,axiom,
name_ID != name_objective ).
fof(ax73,axiom,
name_ID != name_r1 ).
fof(ax74,axiom,
name_ID != name_r1_s1 ).
fof(ax75,axiom,
name_ID != name_r2_s1 ).
fof(ax76,axiom,
name_c != name_k ).
fof(ax77,axiom,
name_c != name_objective ).
fof(ax78,axiom,
name_c != name_r1 ).
fof(ax79,axiom,
name_c != name_r1_s1 ).
fof(ax80,axiom,
name_c != name_r2_s1 ).
fof(ax81,axiom,
name_k != name_objective ).
fof(ax82,axiom,
name_k != name_r1 ).
fof(ax83,axiom,
name_k != name_r1_s1 ).
fof(ax84,axiom,
name_k != name_r2_s1 ).
fof(ax85,axiom,
name_objective != name_r1 ).
fof(ax86,axiom,
name_objective != name_r1_s1 ).
fof(ax87,axiom,
name_objective != name_r2_s1 ).
fof(ax88,axiom,
name_r1 != name_r1_s1 ).
fof(ax89,axiom,
name_r1 != name_r2_s1 ).
fof(ax90,axiom,
name_r1_s1 != name_r2_s1 ).
fof(ax91,axiom,
! [VAR_X_10X30] : constr_xor(VAR_X_10X30,VAR_X_10X30) = constr_ZERO ).
fof(ax92,axiom,
! [VAR_X_9] : constr_xor(VAR_X_9,constr_ZERO) = VAR_X_9 ).
fof(ax93,axiom,
! [VAR_X_7,VAR_Y_8] : constr_xor(VAR_X_7,VAR_Y_8) = constr_xor(VAR_Y_8,VAR_X_7) ).
fof(ax94,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(ax95,axiom,
! [VAR_V_29,VAR_V_30X30] :
( ( pred_attacker(VAR_V_29)
& pred_attacker(VAR_V_30X30) )
=> pred_attacker(constr_xor(VAR_V_29,VAR_V_30X30)) ) ).
fof(ax96,axiom,
pred_attacker(tuple_true) ).
fof(ax97,axiom,
! [VAR_V_32] :
( pred_attacker(VAR_V_32)
=> pred_attacker(constr_split_R(VAR_V_32)) ) ).
fof(ax98,axiom,
! [VAR_V_34] :
( pred_attacker(VAR_V_34)
=> pred_attacker(constr_split_L(VAR_V_34)) ) ).
fof(ax99,axiom,
! [VAR_V_36] :
( pred_attacker(VAR_V_36)
=> pred_attacker(tuple_sess_1_out_3(VAR_V_36)) ) ).
fof(ax100,axiom,
! [VAR_V_39] :
( pred_attacker(tuple_sess_1_out_3(VAR_V_39))
=> pred_attacker(VAR_V_39) ) ).
fof(ax101,axiom,
! [VAR_V_43,VAR_V_44] :
( ( pred_attacker(VAR_V_43)
& pred_attacker(VAR_V_44) )
=> pred_attacker(tuple_sess_1_out_2(VAR_V_43,VAR_V_44)) ) ).
fof(ax102,axiom,
! [VAR_V_51,VAR_V_52] :
( pred_attacker(tuple_sess_1_out_2(VAR_V_51,VAR_V_52))
=> pred_attacker(VAR_V_51) ) ).
fof(ax103,axiom,
! [VAR_V_54,VAR_V_55] :
( pred_attacker(tuple_sess_1_out_2(VAR_V_54,VAR_V_55))
=> pred_attacker(VAR_V_55) ) ).
fof(ax104,axiom,
! [VAR_V_58] :
( pred_attacker(VAR_V_58)
=> pred_attacker(tuple_sess_1_out_1(VAR_V_58)) ) ).
fof(ax105,axiom,
! [VAR_V_61] :
( pred_attacker(tuple_sess_1_out_1(VAR_V_61))
=> pred_attacker(VAR_V_61) ) ).
fof(ax106,axiom,
! [VAR_V_65,VAR_V_66] :
( ( pred_attacker(VAR_V_65)
& pred_attacker(VAR_V_66) )
=> pred_attacker(constr_rotate(VAR_V_65,VAR_V_66)) ) ).
fof(ax107,axiom,
! [VAR_V_69] :
( pred_attacker(VAR_V_69)
=> pred_attacker(constr_h(VAR_V_69)) ) ).
fof(ax108,axiom,
pred_attacker(tuple_false) ).
fof(ax109,axiom,
pred_attacker(constr_ZERO) ).
fof(ax110,axiom,
! [VAR_V_71] :
( pred_attacker(VAR_V_71)
=> pred_attacker(tuple_R_out_4(VAR_V_71)) ) ).
fof(ax111,axiom,
! [VAR_V_74] :
( pred_attacker(tuple_R_out_4(VAR_V_74))
=> pred_attacker(VAR_V_74) ) ).
fof(ax112,axiom,
! [VAR_V_77] :
( pred_attacker(VAR_V_77)
=> pred_attacker(tuple_R_out_3(VAR_V_77)) ) ).
fof(ax113,axiom,
! [VAR_V_80X30] :
( pred_attacker(tuple_R_out_3(VAR_V_80X30))
=> pred_attacker(VAR_V_80X30) ) ).
fof(ax114,axiom,
! [VAR_V_84,VAR_V_85] :
( ( pred_attacker(VAR_V_84)
& pred_attacker(VAR_V_85) )
=> pred_attacker(tuple_R_out_1(VAR_V_84,VAR_V_85)) ) ).
fof(ax115,axiom,
! [VAR_V_92,VAR_V_93] :
( pred_attacker(tuple_R_out_1(VAR_V_92,VAR_V_93))
=> pred_attacker(VAR_V_92) ) ).
fof(ax116,axiom,
! [VAR_V_95,VAR_V_96] :
( pred_attacker(tuple_R_out_1(VAR_V_95,VAR_V_96))
=> pred_attacker(VAR_V_96) ) ).
fof(ax117,axiom,
! [VAR_V_10X300X30,VAR_V_10X301] :
( ( pred_attacker(VAR_V_10X300X30)
& pred_attacker(VAR_V_10X301) )
=> pred_attacker(tuple_R_in_2(VAR_V_10X300X30,VAR_V_10X301)) ) ).
fof(ax118,axiom,
! [VAR_V_10X308,VAR_V_10X309] :
( pred_attacker(tuple_R_in_2(VAR_V_10X308,VAR_V_10X309))
=> pred_attacker(VAR_V_10X308) ) ).
fof(ax119,axiom,
! [VAR_V_111,VAR_V_112] :
( pred_attacker(tuple_R_in_2(VAR_V_111,VAR_V_112))
=> pred_attacker(VAR_V_112) ) ).
fof(ax120,axiom,
pred_attacker(constr_QUERY) ).
fof(ax121,axiom,
pred_attacker(constr_CONST_4) ).
fof(ax122,axiom,
pred_attacker(constr_CONST_3) ).
fof(ax123,axiom,
pred_attacker(constr_CONST_2) ).
fof(ax124,axiom,
pred_attacker(constr_CONST_1) ).
fof(ax125,axiom,
pred_attacker(constr_CONST_0x30) ).
fof(ax126,axiom,
! [VAR_V_118,VAR_V_119] :
( ( pred_mess(VAR_V_119,VAR_V_118)
& pred_attacker(VAR_V_119) )
=> pred_attacker(VAR_V_118) ) ).
fof(ax127,axiom,
! [VAR_V_120X30,VAR_V_121] :
( ( pred_attacker(VAR_V_121)
& pred_attacker(VAR_V_120X30) )
=> pred_mess(VAR_V_121,VAR_V_120X30) ) ).
fof(ax128,axiom,
pred_attacker(name_c) ).
fof(ax129,axiom,
! [VAR_V_123] : pred_equal(VAR_V_123,VAR_V_123) ).
fof(ax130,axiom,
! [VAR_V_124] : pred_attacker(name_new0x2Dname(VAR_V_124)) ).
fof(ax131,axiom,
pred_attacker(tuple_sess_1_out_1(name_r1_s1)) ).
fof(ax132,axiom,
pred_attacker(tuple_sess_1_out_2(name_r2_s1,constr_split_L(constr_xor(constr_rotate(name_ID,constr_h(constr_xor(constr_xor(name_r1_s1,name_r2_s1),name_k))),constr_h(constr_xor(constr_xor(name_r1_s1,name_r2_s1),name_k)))))) ).
fof(ax133,axiom,
pred_attacker(tuple_sess_1_out_3(constr_split_R(constr_xor(constr_rotate(name_ID,constr_h(constr_xor(constr_xor(name_r1_s1,name_r2_s1),name_k))),constr_h(constr_xor(constr_xor(name_r1_s1,name_r2_s1),name_k)))))) ).
fof(ax134,axiom,
pred_attacker(tuple_R_out_1(constr_QUERY,name_r1)) ).
fof(ax135,axiom,
! [VAR_R2_297] :
( pred_attacker(tuple_R_in_2(VAR_R2_297,constr_split_L(constr_xor(constr_rotate(name_ID,constr_h(constr_xor(constr_xor(name_r1,VAR_R2_297),name_k))),constr_h(constr_xor(constr_xor(name_r1,VAR_R2_297),name_k))))))
=> pred_attacker(tuple_R_out_3(constr_split_R(constr_xor(constr_rotate(name_ID,constr_h(constr_xor(constr_xor(name_r1,VAR_R2_297),name_k))),constr_h(constr_xor(constr_xor(name_r1,VAR_R2_297),name_k)))))) ) ).
fof(ax136,axiom,
! [VAR_R2_30X303] :
( pred_attacker(tuple_R_in_2(VAR_R2_30X303,constr_split_L(constr_xor(constr_rotate(name_ID,constr_h(constr_xor(constr_xor(name_r1,VAR_R2_30X303),name_k))),constr_h(constr_xor(constr_xor(name_r1,VAR_R2_30X303),name_k))))))
=> pred_attacker(tuple_R_out_4(name_objective)) ) ).
fof(co0,conjecture,
pred_attacker(name_objective) ).
%--------------------------------------------------------------------------